我有两张桌子。创建如下。
CREATE TABLE item (
id INT AUTO_INCREMENT,
value VARCHAR(64),
PRIMARY KEY(id)
)
CREATE TABLE tag (
name VARCHAR(32),
item_id INT /* id of element in item table */
)
我有一个select语句,它返回'项目中的元素列表。表格以及'标签的所有元素'链接到该表的表。它在item.value字段的内容上进行过滤。
SELECT id,value,GROUP_CONCAT(tag.name) FROM item
LEFT JOIN tag ON tag.item_id = id
WHERE value LIKE '%test%'
到目前为止一切顺利。现在我想做同样的事情但得到一个列表,列出了与之关联的特定标签的所有项目表元素。所以我用
替换WHERE查询WHERE tag.name='test'
这为我提供了所有'项目的列表。具有标记' test'的元素但随附的分组标签列表仅包含标签' test'。
如何获取表格中所有元素的列表' item'哪个有标签'测试'以及完整的群组标签列表?
答案 0 :(得分:1)
首先,您的原始查询应该有GROUP BY
:
SELECT i.id, i.value, GROUP_CONCAT(tag.name)
FROM item i LEFT JOIN
tag t
ON t.item_id = i.id
WHERE i.value LIKE '%test%'
GROUP BY i.id, i.value
要仅获取具有特定标记的行,请添加:
HAVING SUM(t.name = 'test') > 0
在GROUP BY
之后。