Как я могу изменить это, чтобы получить случайную запись на многих концах соединения?

Вот мой запрос:

    Select Top 10 CS.CaseStudyID,
    CS.Title,
    CSI.ImageFileName
From CaseStudy CS
Left Join CaseStudyImage CSI On CS.CaseStudyID = CSI.CaseStudyID
And CSI.CSImageID in(
    Select Min(CSImageID) -- >not really satisfactory
    From CaseStudyImage
    Group By CaseStudyID
    )
Order By CS.CaseStudyID ASC

Вместо min (CSImageID) я бы хотел случайную запись из моей таблицы CaseStudyImage, которая соответствует конкретному тематическому исследованию.

Может ли кто-нибудь указать мне мольбы в правильном направлении?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
123
4

Ответы 4

ORDER BY RAND() LIMIT 1?

Нет ограничений в T-SQL или rand (есть newid ()), и я теряюсь, комбинируя эквивалентный Top с order by newid ()

Allen Hardy 16.12.2008 14:49

Извини, что есть Рэнд, но он мне пока не помогает.

Allen Hardy 16.12.2008 14:55

Этот статья описывает 3 метода случайной выборки в t-sql. Это зависит от того, насколько вы контролируете структуру своей таблицы, кому-то из них может понадобиться.

Вы можете использовать функцию ранжирования и newid () для создания случайного порядка с группировкой.

WITH CSI AS (
    SELECT CSI.CaseStudyID, CSI.ImageFileName,
        ROW_NUMBER() OVER(PARTITION BY CSI.CaseStudyID ORDER BY newid()) AS RowNumber
    FROM CaseStudyImage CSI
)
SELECT TOP (10) CS.CaseStudyID, CS.Title, CSI.ImageFileName
FROM CaseStudy CS LEFT JOIN CSI On CS.CaseStudyID = CSI.CaseStudyID
WHERE CSI.RowNumber = 1
ORDER BY CS.CaseStudyID ASC

обычно просто ORDER BY NEWID() делает свое дело

Другие вопросы по теме