我有一个包含三列的表entries
:id, name, display_name
我需要用join编写一个查询,它将检查每个名称的display_names数量,并只显示那些具有多个display_names的名称。
用连接写这个应该相当简单。在我使用下一个查询之前:
SELECT e1.name
FROM entries e1
WHERE (
SELECT COUNT(DISTINCT e2.display_name)
FROM entries e2
WHERE e2.name = r1.name
) > 1;
答案 0 :(得分:5)
您不需要加入。
SELECT e1.name
FROM entries e1
GROUP BY e1.name
HAVING COUNT(*) > 1
请注意,您可以在having子句中使用别名,因此从@ Scorpi0和@Widor借用也可以:
SELECT e1.name, COUNT(DISTINCT e1.display_name) as occurrences
FROM entries e1
GROUP BY e1.name
HAVING occurrences > 1
允许这样做的原因是在完成select中的所有其他内容后评估having
。到那时,别名的内容将是已知的
您不能在WHERE
子句中使用此别名,因为在之前运行(或可能运行) MySQL知道别名中的内容。
答案 1 :(得分:3)
您不需要联接,HAVING子句可以为您执行过滤:
SELECT e1.name
FROM entries e1
GROUP BY e1.name
HAVING COUNT(DISTINCT e1.display_name) > 1
答案 2 :(得分:1)
SELECT name, COUNT(display_name)
FROM entries
GROUP BY name
HAVING COUNT(display_name) > 1