【问题标题】:MYSQL: SELECT DISTINCT only show rows which are uniqueMYSQL:SELECT DISTINCT 只显示唯一的行
【发布时间】:2014-07-02 11:59:21
【问题描述】:

我只想查看列“Stadt”(=City)不等于“Hauptstadt”(=Capital)的行。 我的桌子看起来像:

+----------------------+-------------------+--------------------------+---------------+
| Name                 | Stadt             | Land                     | Hauptstadt    |
+----------------------+-------------------+--------------------------+---------------+
| Kunstmuseum          | Bern              | Schweiz                  | Bern          |
| Musée Picasso        | Paris             | Frankreich               | Paris         |
| Museum Ludwig        | Köln              | Deutschland              | Berlin        |
| Museum of Modern Art | New York          | United States of America | Washington DC |
| Städel               | Frankfurt am Main | Deutschland              | Berlin        |
+----------------------+-------------------+--------------------------+---------------+

我只想看看(想要的输出):

+----------------------+-------------------+--------------------------+---------------+
| Name                 | Stadt             | Land                     | Hauptstadt    |
+----------------------+-------------------+--------------------------+---------------+
| Museum Ludwig        | Köln              | Deutschland              | Berlin        |
| Museum of Modern Art | New York          | United States of America | Washington DC |
| Städel               | Frankfurt am Main | Deutschland              | Berlin        |
+----------------------+-------------------+--------------------------+---------------+

我试过这个:

SELECT DISTINCT Name, Stadt, Land ,Hauptstadt 
FROM Museum 
GROUP BY 'Name', 'Stadt', 'Land', 'Hauptstadt' 
ORDER BY Name;

输出:

+----------------------+----------+--------------------------+---------------+
| Name                 | Stadt    | Land                     | Hauptstadt    |
+----------------------+----------+--------------------------+---------------+
| Museum of Modern Art | New York | United States of America | Washington DC |
+----------------------+----------+--------------------------+---------------+

我的 SELECT 应该如何获得我想要的输出?

感谢您的帮助!

【问题讨论】:

  • 为什么需要DISTINCT?你的要求听起来像Stadt <> Hauptstadt...
  • 让您了解未来; DISTINCT 是一个函数,所以如果你使用它,语法应该是 DISTINCT(some_col)。根据您的标准,您应该在下面接受 Gordon 的回答。
  • DISTINCT不是函数,根据specification 没有括号:SELECT [ALL | DISTINCT | DISTINCTROW ]...。您可以使用括号,但DISTINCT 仍会影响所有选定的列,因此会造成混淆。

标签: mysql sql group-by sql-order-by distinct


【解决方案1】:

group by 中的单引号把你搞砸了。首先,仅对字符串和日期常量使用单引号。其次,你几乎不需要group byselect distinct。第三,您的情况需要一个where 子句。所以试试这个:

SELECT DISTINCT Name, Stadt, Land ,Hauptstadt 
FROM Museum 
WHERE Stadt <> Hauptstadt
ORDER BY Name;

【讨论】:

  • 我怀疑这里的 DISTINCT 并不是真正需要的 - OP 对 DISTINCT 的作用感到困惑,并且示例数据和所需结果中没有证据表明需要 DISTINCTION。
  • @Gordon 这很好用!感谢您展示它也适用于 DISTINCT。
  • 正如@mc100 指出的那样,如果没有distinct,您的查询可能没问题。 select distinct 会降低查询速度,因为引擎必须删除重复项。
【解决方案2】:

我们需要按名称对其进行分组,然后仅比较两列是否相等

SELECT * FROM Museum WHERE Stadt != Hauptstadt GROUP BY Name;

【讨论】:

  • 谢谢!我不知道它会像那样容易。
猜你喜欢
  • 2011-02-04
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 2018-02-10
  • 1970-01-01
  • 2021-05-28
  • 2019-06-26
  • 2015-05-21
相关资源
最近更新 更多