我的数据库中有多餐,里面有文字类型。有时我有退格时间。 E.g
Meal 1
hamburger1
Meal 2
hamburger1
hamburger2
hamburger3
hamburger4
Meal 3
Pizza1
Pizza2
Meal 4
hamburger1
hamburger2
hamburger3
hamburger4 <- with whitespace
我需要区分这个列(命名描述),包括空格。你可以看到Meal2和4是相同的,所以我必须区分它们。然后我做了这个mysql查询:
SELECT DISTINCT(BINARY replace(description,' ','')), description FROM meals
有效。但是,当我添加日期列时,不同的功能不再起作用。也许date是一个mysql关键字,这打破了我的疑问?
SELECT DISTINCT(BINARY replace(description,' ','')), description, date, type FROM meals
如何使其适用于名为date的
列答案 0 :(得分:2)
DISTINCT
不是一个函数,即使你使用括号使它看起来像是一个函数。
DISTINCT
是查询修饰符。它始终适用于所有选择列表中的列。如果任何列不同,则整行计为不同。你使用的括号实际上没有意义。
示例:以下行彼此不同,因为日期与其他行的日期不同,即使前两列是相同的。
a 1 2016-10-20
a 1 2016-10-21
a 1 2016-10-22
如果要将查询结果缩减为某个特定列中具有不同值的行,请使用GROUP BY
:
SELECT TRIM(description) AS description, MAX(date), MAX(type)
FROM meals
GROUP BY description
(提示:TRIM()
函数是使用REPLACE()执行操作的更方便的方法。
其他列,日期和类型,应保留在组聚合函数中。我在这个例子中使用了MAX()。如果您不这样做,并且该组具有多个具有不同日期和类型值的行,则它将选择其中一行任意排序。默认情况下,这种模糊的查询会在MySQL 5.7及更高版本中引发错误。