繁体   English   中英

从COUNT个表中选择2行

[英]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_1value_2中时,从A选择2行。 B中的行特定于具有userid单个用户。

我需要做的是也使它也可以检查B是否已经有N行与A_id (在value_1value_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM