【问题标题】:Problems with HAVING queryHAVING 查询的问题
【发布时间】:2015-03-03 18:26:34
【问题描述】:

我正在学习关于数据库的在线课程。但是,我不知道如何继续这个问题。任何人都可以帮忙吗?这是我的代码:

SELECT distinct name
FROM Persons P, Knows K
WHERE K.personA_id = P.id AND K.personB_id = P.id
GROUP BY name
HAVING SUM(K.id) = 2

【问题讨论】:

  • 选择列表中没有聚合函数就不能有 group by 或 having 子句

标签: mysql sql exists forall


【解决方案1】:
SELECT P.name
FROM Persons P
WHERE  (  SELECT COUNT(*)
          FROM Knows K JOIN Persons P2 ON K.personB_id = P2.id
          WHERE K.personA_id = P.id
          AND P2.age >= 60
      ) = 2

但是如果你想知道如何使用have

SELECT P.name
FROM Persons P JOIN Knows K ON K.personA_id = P.id 
JOIN Persons P2 ON P2.id = K.personB_id
WHERE P2.age >= 60
GROUP BY P.id
HAVING COUNT(*)=2

注意,此查询仅适用于 MySql

【讨论】:

    【解决方案2】:
    SELECT distinct p.name
    FROM Knows K
    LEFT JOIN Persons P,
    ON K.personA_id = P.id 
    WHERE K.personB_id 
      IN (
        SELECT id
        FROM Persons
        WHERE age>60
      )
    GROUP BY name
    HAVING COUNT(K.personB_id) = 2
    

    【讨论】:

      【解决方案3】:

      知道表中的人 A 和人 B 总是不同的,对吧?如果是这样,那么您不应该同时满足这两个条件。

      我建议你删除“AND K.personB_id = P.id”

      【讨论】:

      • 非常感谢,但仍然没有返回查询。我认为这是因为我的代码的最后两行,但我不确定。你知道吗?
      猜你喜欢
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      相关资源
      最近更新 更多