加入sql查询来分析值

Den*_* S. 1 sql join

我有一个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)

Joh*_*ica 5

您不需要加入.

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知道别名中的内容之前运行(或可能运行).

  • 对于**组而言,由**和**具有**线索. (2认同)