当另一个表的COUNT时,从表中选择2行

时间:2010-06-14 20:51:15

标签: sql mysql count left-join

以下是我目前的代码:

   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_idvalue_1的{​​{1}}时,它应该从value_2中选择2行}。 B中的行特定于B的个人用户。

我需要做的是同时检查userid中是否有N行与B匹配(A_idvalue_1 )和value_2,如果有超过N行,则不会选择userid行。

1 个答案:

答案 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