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/