我有一个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;
Run Code Online (Sandbox Code Playgroud)
您不需要加入.
SELECT e1.name
FROM entries e1
GROUP BY e1.name
HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)
请注意,您可以在having子句中使用别名,因此从@ Scorpi0和@Widor借用您也可以:
SELECT e1.name, COUNT(DISTINCT e1.display_name) as occurrences
FROM entries e1
GROUP BY e1.name
HAVING occurrences > 1
Run Code Online (Sandbox Code Playgroud)
允许这样做的原因是having在完成select中的所有其他内容之后进行评估.到那时,别名的内容将是已知的.
您不能在WHERE子句中使用此别名,因为在 MySQL知道别名中的内容之前运行(或可能运行).
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |