MySQL:如何在一个查询中使用分配表连接三个表?

标签 mysql

我有三个表:

ITEMS
itemid | itemname
1      | Item 1

FEATURES
featureid | featurename
1         | feature1
2         | feature2
3         | feature3
4         | feature4
...       | ...

ASSIGN
assignid | itemid | featureid
1        | 1      | 1
1        | 1      | 2
1        | 1      | 3
1        | 1      | 4

我想要一个查询,它会给我类似这样的结果:

ITEMS
itemid | itemname | featurename1 | featurename2  | etc
1      | Item 1   | feature1     | feature2      | etc

有没有办法在不进行第二次查询的情况下执行此操作?我发誓我只是以错误的方式思考它?有什么想法吗?

注意:特征可以是 0 到 50 个不同的特征。我的数据库设计可能是错误的吗?

最佳答案

使用您的 ASSIGN 表链接它们,然后您可以使用 GROUP_CONCAT() 来执行您想要的操作。试试这个:

SELECT
  ITEMS.itemid,
  ITEMS.itemname,
  FEATURES.featureid,
  GROUP_CONCAT(FEATURES.featurename) AS FEATURES
FROM ITEMS
 JOIN ASSIGN ON ITEMS.itemid = ASSIGN.itemid
 JOIN FEATURES ON FEATURES.featureid = ASSIGN.featureid

SQL Fiddle link

关于MySQL:如何在一个查询中使用分配表连接三个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16222294/

相关文章:

尽管没有显示错误,但 Java 数组元素未插入到 MySQL 表中

mysql - 根据日期合并数据的sql查询

java - 如何使我在 MySQL 数据库中的主键适用于小写和大写?

php - 当我切换到本地主机到服务器时,图像没有上传到特定文件夹

sql - MySQL 中的索引 CHAR(255) 字段......它是最佳的吗?

mysql - 升级Wordpress后数据库连接错误

mysql - 由于按子句排序,我的查询不起作用

php - mysql 事件调度是合适的(或最佳的)解决方案吗?

java - 使用SSL连接在java中连接到mySQL数据库

php - 比较从表中获取的数据时出错