MySQL DISTINCT 函数没有按预期工作

标签 mysql sql join distinct

注意:我是 MySQL 的新手,所以请多多包涵。

我的数据库中有 2 个表,它们的设置如下:

guides table:
guide_id (primary) | cat_id | title
   1                   0     guide01
   2                   0     guide02

steps table:
step_id | guide_id (foreign) | step_txt
   1              1            step1 text...
   2              1            step2 text...

我正在尝试在数据库中搜索 steps.step_txt 中的关键字并返回指南列表。我当前的查询如下所示:

SELECT DISTINCT * 
  FROM guides 
    JOIN steps ON guides.guide_id=steps.guide_id 
  WHERE step_txt LIKE "%keyword%"

我发现,由于某些指南中包含关键字的步骤不止一个,因此会返回重复的行。我希望查询输出包含 guide_id、cat_id 和标题的 1 行,即使找到 2 行也是如此。

我认为问题在于我使用了 JOIN,因此查询实际上从两个表返回一个连接行,这两个表具有不同的 step_id 和 step_txt,因此 DISTINCT 不会影响它。最好的解决方法是什么?

最佳答案

粗略的解决方案是:-

SELECT DISTINCT guides.* 
  FROM guides 
    JOIN steps ON guides.guide_id=steps.guide_id 
  WHERE step_txt LIKE "%keyword%"

可能更优雅并为您提供匹配的文本:-

SELECT g.guide_id, g.cat_id, g.title, GROUP_CONCAT(s.step_txt)
FROM guides g
INNER JOIN steps s
ON g.guide_id = s.guide_id 
WHERE step_txt LIKE "%keyword%"
GROUP BY g.guide_id, g.cat_id, g.title

关于MySQL DISTINCT 函数没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21910298/

相关文章:

mysql - 我想使用sequelize nodejs 将四个不同表中的数据添加在一起

mysql - 如何在LabVIEW中查询MySQL ODBC版本

sql - 从 sql 表中的 json 中提取所有值

c# - 线类报表、线日报表

mysql - 输入价格

mysql - 如何使用MySQL中的列值为表中的每条记录生成多条记录?

mysql - Laravel DB 查询连接多个表并获取条件数据

mysql - 从具有多个条件的两个 MySQL 表中进行选择的最佳方法

mysql - SQLite 在 WHERE 中传递多个参数

mysql - LEFT OUTER JOIN AND WHERE 连接表