Mysql SQL查询不同的二进制替换为日期列
我在我的数据库中有多顿饭,其中有一个文本类型。有时我会退格,有时不会Mysql SQL查询不同的二进制替换为日期列,mysql,distinct,Mysql,Distinct,我在我的数据库中有多顿饭,其中有一个文本类型。有时我会退格,有时不会 Meal 1 hamburger1 Meal 2 hamburger1 hamburger2 hamburger3 hamburger4 Meal 3 Pizza1 Pizza2 Meal 4 hamburger1 hamburger2 hamburger3 hamburger4 <- with whitespace 它起作用了。但是当我添加date列时,distinct不再起作用。也许date是mysql关键
Meal 1
hamburger1
Meal 2
hamburger1
hamburger2
hamburger3
hamburger4
Meal 3
Pizza1
Pizza2
Meal 4
hamburger1
hamburger2
hamburger3
hamburger4 <- with whitespace
它起作用了。但是当我添加date列时,distinct不再起作用。也许date是mysql关键字,这破坏了我的查询
SELECT DISTINCT(BINARY replace(description,' ','')), description, date, type FROM meals
如何使其与名为date的列一起工作?
DISTINCT
不是一个函数,即使您使用了括号使其看起来像一个函数
DISTINCT
是一个查询修饰符。它始终适用于选择列表中的所有列。如果任何列不同,则整行将被视为不同。你用的括号实际上毫无意义
示例:以下行彼此不同,因为日期与其他行上的日期不同,即使前两列相同
a 1 2016-10-20
a 1 2016-10-21
a 1 2016-10-22
如果要将查询结果减少到在一个特定列中具有不同值的行,请使用分组依据
:
SELECT TRIM(description) AS description, MAX(date), MAX(type)
FROM meals
GROUP BY description
(提示:TRIM()
其他列(日期和类型)应保存在组聚合函数中。我在本例中使用了MAX()。如果您不这样做,并且组中有多个日期和类型值不同的行,它将任意选择其中一行。这种模棱两可的查询在MySQL 5.7及更高版本中默认会抛出一个错误。到底是什么不起作用?我不确定,但我怀疑您的date列使每个事件都与其他事件不同(即,在结果集中将作为单独的行返回)。问题是,distinct被忽略,我对所有行都有一个正常的select
SELECT TRIM(description) AS description, MAX(date), MAX(type)
FROM meals
GROUP BY description