mysql - 存在一个关系的返回关系集?

标签 mysql

Here's the relevant part of my database on SQLFiddle.

考虑到该设置,我想编写一个查询“选择 th.thing 和一个事物具有的所有标签的列表,其中所有标签的列表包含 tag2”。

我预期的结果集是:

事情1 |标记 1、标记 2
事情2 |标签 2、标签 3

我已经尝试了各种连接和分组方法以及 GROUP_CONCAT(),但我似乎无法得到任何工作。

如何通过 1 个查询从数据库中提取我想要的结果集?

最佳答案

有点hacky 因为它使用FIND_IN_SET , 但似乎有效 ( sqlfiddle )。

如果你的任何标签中有逗号,我不会指望它工作,因为 GROUP_CONCAT 似乎没有做任何特殊的事情来转义那个逗号,所以 FIND_IN_SET 将其视为定界符。

SELECT
  things.thing,
  GROUP_CONCAT(tags.tag) AS tags
FROM things
JOIN relationships
  ON things.id = relationships.thing_id
JOIN tags
  ON relationships.tag_id = tags.id
GROUP BY things.id
HAVING FIND_IN_SET('tag2', GROUP_CONCAT(tags.tag));

产量:

THING   TAGS
thing1  tag2,tag1
thing2  tag2,tag3

关于mysql - 存在一个关系的返回关系集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18422236/

相关文章:

mysql - 难以掌握 MySQL 的函数依赖概念

php - 来自 MySQL 查询的 Jquery 多维 JSON

c# - NHibernate 中的一对多

mysql - Zend Framework 中的更新查询

php - 从 XML 文件更新 MySQL 数据库

php - 如何查询重复项?

php - 需要 php mysql 语句的帮助,该语句具有 "and"和范围

php - datatables.net 列对另一列进行排序

MySql 搜索查询无法返回内部包含 %20 的行

sql - 将 SQL Server 转换为 MySQL