选择不同的行当存在两列的逻辑或时
Selecting Distinct rows When there is a Logical OR with two columns
如标题所示,我有一个 MySQL 查询是这样的:
SELECT DISTINCT `friendly_url` FROM `post` WHERE `description` LIKE ? OR `heading` LIKE ? ORDER BY `friendly_url`
我在参数中提供了字符串“%”通配符,以便它可以用作搜索功能。然而,假设用户正在搜索像 'is' 这样的常用词,它同时出现在标题和描述中的相同 post 中。然后这个查询 returns 同样 post 两次。我不希望发生这种情况,因此 'DISTINCT'.
为什么会这样?我有什么办法可以让它按照我想要的方式工作吗?
查询未对同一行 return 两次。 WHERE
子句中的谓词针对每一行进行评估,并且该行是 returned,或者不是。 OR
条件的组合不会导致 MySQL 到 return 多次 "same row"。
如果您得到 friendly_url
的重复值,那么 post
table 中有多个行具有与 friendly_url
相同的值。 (即 friendly_url
列在 post
table 中 不是 唯一。)
您不必使用 DISTINCT
关键字从结果集中删除重复项。您可以删除 DISTINCT
关键字,并在 ORDER BY
子句之前添加 GROUP BY friendly_url
。
要识别 friendly_url
的 "duplicated" 值,以及有多少行具有相同的值:
SELECT p.friendly_url
, COUNT(1)
FROM post p
GROUP BY p.friendly_url
HAVING COUNT(1) > 1
如标题所示,我有一个 MySQL 查询是这样的:
SELECT DISTINCT `friendly_url` FROM `post` WHERE `description` LIKE ? OR `heading` LIKE ? ORDER BY `friendly_url`
我在参数中提供了字符串“%”通配符,以便它可以用作搜索功能。然而,假设用户正在搜索像 'is' 这样的常用词,它同时出现在标题和描述中的相同 post 中。然后这个查询 returns 同样 post 两次。我不希望发生这种情况,因此 'DISTINCT'.
为什么会这样?我有什么办法可以让它按照我想要的方式工作吗?
查询未对同一行 return 两次。 WHERE
子句中的谓词针对每一行进行评估,并且该行是 returned,或者不是。 OR
条件的组合不会导致 MySQL 到 return 多次 "same row"。
如果您得到 friendly_url
的重复值,那么 post
table 中有多个行具有与 friendly_url
相同的值。 (即 friendly_url
列在 post
table 中 不是 唯一。)
您不必使用 DISTINCT
关键字从结果集中删除重复项。您可以删除 DISTINCT
关键字,并在 ORDER BY
子句之前添加 GROUP BY friendly_url
。
要识别 friendly_url
的 "duplicated" 值,以及有多少行具有相同的值:
SELECT p.friendly_url
, COUNT(1)
FROM post p
GROUP BY p.friendly_url
HAVING COUNT(1) > 1