我有带标签的表格。它有列 id、tagTypeId 和 tagName。每个项目可以有多个标签。 对于每个项目,我想选择 tagTypeId 为 1、2 和 3 的第一个标签。我尝试在我的查询中添加 3 个几乎相同的左连接,效果很好,但速度非常慢(比如 5 秒,表中的数据量不小)
有点像
select i.*, tag1.name, tag2.name, tag3.name from items i
left join (select t.id, t.tagName as name from tags t where t.tagTypeId=1) tag1 on ...
left join (select t.id, t.tagName as name from tags t where t.tagTypeId=2) tag2 on ...
left join (select t.id, t.tagName as name from tags t where t.tagTypeId=3) tag3 on ...
如何在一个连接中更好地实现它?
最佳答案
如果你做了类似的事情
select i.*, tag.name, tagTypeId
from items i left join (select t.id, t.tagName as name
from tags t where t.tagTypeId in (1, 2, 3)) on ...
order by i.itemid, tagTypeId
您会为每个项目获得几行,可以在程序中轻松转置。
关于MySQL 选择标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21257091/