[英]Select 2 Rows from Table when COUNT of another table
这是我目前拥有的代码:
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_id
不在B
value_1
或value_2
中时,从A
选择2行。 B
中的行特定于具有userid
单个用户。
我需要做的是也使它也可以检查B
是否已经有N行与A_id
(在value_1
或value_2
)和userid
相匹配,并且如果有N行以上,则不选择A
排。
以下将处理您的第一个请求:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.