以下是我目前的代码:
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
不在A_id
或value_1
的{{1}}时,它应该从value_2
中选择2行}。 B
中的行特定于B
的个人用户。
我需要做的是同时检查userid
中是否有N行与B
匹配(A_id
或value_1
)和value_2
,如果有超过N行,则不会选择userid
行。
答案 0 :(得分:1)
以下内容将处理您的第一个请求:
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
部分技巧是将您的标准移动到Left Join的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