Выберите 2 строки из таблицы, когда COUNT другой таблицы - PullRequest
0 голосов
/ 15 июня 2010

Вот код, который у меня сейчас есть:

   SELECT `A`.* 
     FROM `A`
LEFT JOIN `B` ON `A`.`A_id` = `B`.`value_1` 
    WHERE `B`.`value_2` IS NULL 
      AND `B`.`userid` IS NULL
 ORDER BY RAND() LIMIT 2

В настоящее время предполагается, что он выбирает 2 строки из A, когда выбираемые 2 строки A_id находятся не в value_1 или value_2 в B. И строки в B относятся к отдельным пользователям с userid.

Что мне нужно сделать, так это сделать так, чтобы он также проверял, есть ли уже N строк в B, соответствующих A_id (либо в value_1, либо value_2) и userid, и если строк больше N, строка A не выбирается.

1 Ответ

1 голос
/ 15 июня 2010

Следующие запросы будут обрабатывать ваш первый запрос:

Select ...
From A
    Left Join B
        On ( B.value_1 = A.A_id Or B.value_2 = A.A_id )
            And B.userid = @userid
Where B.<non-nullable column> Is Null

Часть хитрости заключается в перемещении ваших критериев в предложение ON в левом соединении.Я не уверен, как вторая часть вашего запроса соответствует первой части.Если в B нет строк, совпадающих по значению value_1 или value_2 для данного пользователя, то по определению количество строк будет равно нулю.Вы хотите, чтобы это была ситуация, когда в заданном критерии может быть только максимальное количество строк в B?Если так, то я бы написал свой запрос так:

Select ...
From A
Where   (
        Select Count(*)
        From B B2
        Where ( B2.value_1 = A.A_id Or B2.value_2 = A.A_id )
            And B2.userid = @userid
        ) <= @MaxItems
...