MySQL 选择标签

标签 mysql sql select join group-by

我有带标签的表格。它有列 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/

相关文章:

InnoDB 表不显示 MySQL FK 字段

mysql - 查询没有返回我认为会的所有行

PHP:从数组或 SQL 表中获取数据更快吗?

mysql - JdbcTemplate 'IN' 搜索无法正常工作

java - 无法在 Spring Boot 2.3.3 中构建镜像

mysql - 奇怪的查询,不确定是否需要嵌套?这是怎么回事?

mysql - 从数据库中仅查找一个小于条件的条目

php - MySQL 使用连接进行查询搜索

php - 多组同名选择框=

mysql - 使用mysql获取当前排名