我有两个MySQL表。一个包含Items(格式:id | name | ...),另一个包含属于这些项的标签(格式:id | item_id | name | ...)。每个人都有一行'使用'一个标签。一个项目可以有许多标签。
是否可以(例如通过智能使用JOIN)仅使用一个请求获取所有项目(包括其关联标签)?
我想要的是:
答案 0 :(得分:5)
这可以通过连接轻松完成,您只需使用item_id作为相关列:
SELECT i.id, i.name, t.name
FROM items i
JOIN tags t ON t.item_id = i.id;
如果要查看组合在一起的项目的所有标记,可以考虑使用GROUP_CONCAT()
函数:
SELECT i.id, i.name, GROUP_CONCAT(t.name) AS tags
FROM items i
JOIN tags t ON t.item_id = i.id
GROUP BY i.id;
这将为您提供逗号分隔的每个项目的所有标记列表。请注意,上述查询仅返回具有标记的项目。如果您想查看所有项目,无论他们是否有与之关联的标记,您都应使用LEFT JOIN
。