过滤MySQL根据已连接的表格字段进行选择

时间:2017-07-15 11:41:54

标签: mysql sql

我有两张桌子。创建如下。

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'哪个有标签'测试'以及完整的群组标签列表?

1 个答案:

答案 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之后。