【问题标题】:SQL duplicated rows selection without using "having"SQL 重复行选择而不使用“有”
【发布时间】:2016-02-18 01:13:53
【问题描述】:

我有这种类型的桌子:

A.code        A.name
   1.            X
   2.            Y
   3.            X
   4.            Z
   5.            Y

我需要编写一个查询,让我得到所有重复的名字,如下所示:

 A.name
   X
   Y
   Z

不使用“分组依据”。

【问题讨论】:

  • 为什么没有GROUP BY
  • 因为这是我的第一个 SQL 查询练习,我们的讲师指示我们不要使用它(因为我们还没有学习它)
  • 我觉得使用 group by 比不使用 group by 容易得多
  • 我不明白,我这样做是为了我自己的练习,没有人在嘲笑我,我想扩展我的知识。
  • 你说你不能使用GROUP BY,因为你的导师这么说,但是你做这个练习是为了你自己的练习?它是如何工作的?

标签: mysql sql distinct


【解决方案1】:
SELECT a1.name FROM A a1, A a2 WHERE a1.name=a2.name AND a1.code<>a2.code

这假设代码是唯一的;)。

【讨论】:

  • 有趣。那是我以前第一次看到这种符号。似乎与联接相同。
  • 这是一种旧的(已弃用的)“交叉连接”方式。它仍然是有效的语法,但不是最佳实践。
【解决方案2】:

尝试使用DISTINCT 作为列。请注意,在具有大量行的表中,这不是最佳性能选项。

SELECT DISTINCT A.Name FROM A 

【讨论】:

  • 这不会回答问题。它要求重复,而不是不同的值。
【解决方案3】:

相关的子查询在这里是你的朋友。由于在外部查询和子查询中都使用了表别名,因此针对外部查询中引用的表中的每一行评估子查询。

在子查询中,不带别名再次查询外表,判断该行是否符合条件。

SELECT DISTINCT name FROM Names AS CorrelatedNamesTable 
WHERE 
(
     SELECT COUNT(Name) FROM Names WHERE Name = CorrelatedNamesTable.Name
) > 1

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 2010-10-06
    • 2020-10-16
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 2019-07-06
    • 2020-07-27
    相关资源
    最近更新 更多