一尘不染

反引号和撇号之间的最大区别是什么?

sql

以下两个查询给出完全不同的结果的原因是什么?

MariaDB [mydatabase]> SELECT COUNT(DISTINCT(`price`)) FROM `products`; --Good
+--------------------------+
| COUNT(DISTINCT(`price`)) |
+--------------------------+
|                     2059 |
+--------------------------+
1 row in set (0.01 sec)

MariaDB [mydatabase]> SELECT COUNT(DISTINCT('price')) FROM `products`; --Bad
+--------------------------+
| COUNT(DISTINCT('price')) |
+--------------------------+
|                        1 |
+--------------------------+
1 row in set (0.01 sec)

我已经在Google周围搜索了反引号和撇号(又称为单引号)之间的区别,但是我找不到任何迹象表明为什么对于像上列这样的列名它们会有不同的解释。

难道实际上不是将后一个查询中的单引号字符串解释为列名,而是解释为任意字符串文字,可以说其为“ 1”吗?如果是这样,要找到任何有关撇号含义的页面并不容易。


阅读 355

收藏
2021-03-10

共1个答案

一尘不染

“价格”(撇号或引号)是一个字符串。它永远不会改变,因此计数始终为1。

“价格”(背景知识)是指该列price。因此可能会超过1。

内括号无关。 COUNT(DISTINCT price)与您的标准版本相同。

  • SELECT COUNT(*) FROM tbl WHERE ... 是询问多少行的常用方法。
  • SELECT foo, COUNT(*) FROM tbl GROUP BY foo是一种常见的询问方式,每个值对应多少行foo
  • SELECT foo, COUNT(foo) FROM tbl GROUP BY foo与上述相同,但不计算中的行foo IS NULL

SELECT DISTINCT ... GROUP BY ...是胡说八道。使用DISTINCT或使用GROUP BY。

2021-03-10