mysql - JOIN 表的查询

标签 mysql

我正在做数据库类(class)的练习,但我无法完成最后一个练习。

问题是:编写一个查询,返回所有喜欢至少两个绿眼睛的人的名字。消除查询结果中的重复项。

给出了两个表,即: 人员{id、姓名、地址、年龄、眼睛颜色、性别}

喜欢 {id、personA_id → 人物、personB_id → 人物}

我编写的代码是:

SELECT distinct P1.name, COUNT(P2.id)
FROM Persons P1
INNER JOIN Likes L
    On P1.id = L.PersonA_id
INNER JOIN Persons P2
    ON P2.id = L.PersonB_id
WHERE P2.eyeColor = "green" 
AND COUNT(P2.id) >= 2
GROUP BY name

我需要做什么才能让它发挥作用?

提前致谢,

最佳答案

SELECT 和 GROUP BY 子句应使用相同的列 - P1.name。 “COUNT(P2.id) >= 2”应在 HAVING 子句中使用,而不是在 WHERE 中使用

SELECT
  P1.name,
  COUNT(P2.id)
FROM
  Persons P1
  INNER JOIN Likes L On P1.id = L.PersonA_id
  INNER JOIN Persons P2 ON P2.id = L.PersonB_id
WHERE
  P2.eyeColor = "green" 
GROUP BY
  P1.name
HAVING
  COUNT(P2.id) >= 2

关于mysql - JOIN 表的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28834467/

相关文章:

mysql - SQL 查询只返回一行

mysql - 我可以这样做吗? if( 2<a<8 , 1, 0) 作为mysql中的值?

mysql - 我需要对我的帖子的 ID 进行重新编号,以在 MySQL 中以更高的数字开始

php - MySQL/PHP - PDO 缓冲区溢出可能吗?

php - 将类似日期的字符串保存到数据库,但 MYSQL 将其转换为十进制字符串

javascript - 如何将不同表中的字段值映射到 API 中的 ID?

mysql - SQL - 如何连接两个表并根据它们之间的 ID 对列求和?

php - 在 PHP 中重新加载浏览器时自动插入以前的数据

php - 分解或拆分数据库查询中的值 (PHP/MySQL)

mysql - 如何在表格中按用户名对所有分数进行分组并显示排名?