【问题标题】:SQL select dependent on count with conditionSQL选择依赖于条件计数
【发布时间】:2019-01-23 22:10:23
【问题描述】:

我有两张桌子:

Table A:                Table B:
id  name               id   a_id   param
1    xxx               1      1      3
2    yyy               2      1      4
                       3      1      5
                       4      2      3
                       5      2      4
                       6      2      9

我需要从表 A 中选择这样的名称,其中 B 中与 3 <= param <= 5 的相关行数小于 3。

在上述情况下,它应该只产生yyy,因为它只有 B 中的 2 个相关行
3 <= param <= 5。而xxx 有 3 行具有这种条件的相关行。

【问题讨论】:

  • 看起来像一个 GROUP BY 和 HAVING 问题。

标签: sql select count inner-join


【解决方案1】:

您可以将GROUP BYHAVING 一起使用:

SELECT A.name 
FROM A LEFT JOIN B ON A.id = B.a_id AND B.param BETWEEN 3 AND 5 
GROUP BY A.name 
HAVING COUNT(*) < 3

如果您需要表A 的所有列,您可以使用INNER JOIN 和上面的SELECT

SELECT A.* 
FROM A INNER JOIN (
    SELECT A.id 
    FROM A LEFT JOIN B ON A.id = B.a_id AND B.param BETWEEN 3 AND 5 
    GROUP BY A.id 
    HAVING COUNT(*) < 3
) A2 ON A.id = A2.id;

演示: https://www.db-fiddle.com/f/jBCw5G1LvrRC37TLVx3UsB/1

【讨论】:

    【解决方案2】:

    嗯。 . .你可以使用group byjoin

    select a.*
    from a left join
         (select a_id, count(*) as cnt
          from b
          where param >= 3 and param <= 5
          group by a_id
         ) b
         on b.a_id = a.id
    where b.cnt < 3 or b.cnt is null;
    

    【讨论】:

      猜你喜欢
      • 2011-12-19
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      • 2022-08-18
      • 2020-10-09
      • 2021-04-15
      相关资源
      最近更新 更多