选择不同的行当存在具有两列的逻辑OR时

时间:2015-05-29 18:05:00

标签: mysql distinct logical-or

正如标题所示,我有一个像这样的MySQL查询:

SELECT DISTINCT `friendly_url` FROM `post` WHERE `description` LIKE ? OR `heading` LIKE ? ORDER BY `friendly_url`

我在参数中给出了字符串'%'外卡,以便它可以作为搜索功能使用。但是,假设用户正在搜索像“是”这样的常用词,并且它出现在同一帖子的标题和说明中。然后此查询返回两次相同的帖子。我不希望这种情况发生,因此'DISTINCT'。

为什么会这样?我可以用任何方式让它按照我想要的方式工作吗?

1 个答案:

答案 0 :(得分:2)

查询未返回同一行两次。 WHERE子句中的谓词针对每一行进行评估,并且返回该行,或者不返回该行。 OR条件的组合不会导致MySQL返回"同一行"多次。

如果您获得friendly_url的重复值,则post表中的多行具有friendly_url的相同值。 (即friendly_url列中post唯一。)

您不必使用DISTINCT关键字从结果集中删除重复项。您可以删除DISTINCT关键字,并在GROUP BY friendly_url子句之前添加ORDER BY

识别"重复的"值friendly_url,以及有多少行具有相同的值:

  SELECT p.friendly_url
       , COUNT(1)
    FROM post p
   GROUP BY p.friendly_url
  HAVING COUNT(1) > 1