MySQL连接表中具有多个值的表

时间:2016-04-20 09:42:13

标签: mysql join

我有两张桌子:

产品:

+-----------+-------------------------+
|product_id |          colors         |
+-----------+-------------------------+
|     1     |      1001,1002,1004     |
+-----------+-------------------------+
|     2     |      1005,1002,1001     |
+-----------+-------------------------+

颜色:

+--------------------+
|  id  |  color_rgb  |
+--------------------+
| 1001 | (24,251,89) |
+--------------------+
| 1002 |  (116,18,1) |
+--------------------+
| 1003 | (221,251,23)|
+--------------------+
| 1004 | (124,251,42)|
+--------------------+

我想做的就是像这样加入两个表:

SELECT * 
FROM products
JOIN colors ON (products.colors = colors.id)

但问题是,它只显示类似的东西(对于product_id = 1,让我们说)

+-----------+-------------------------+--------------------+
|product_id |          colors         |  id  |  color_rgb  |
+-----------+-------------------------+---------------------
|     1     |      1001,1002,1004     | 1001 | (24,251,89) |
+-----------+-------------------------+--------------------+

仅从颜色中获取第一个(1001)值。是否可以循环播放'颜色并显示每一个?(或由他们分组?[GROUP BY在这里不起作用])

2 个答案:

答案 0 :(得分:2)

MySQL CONCAT函数用于连接两个字符串:使用c.id

制作p.colors格式为1001,1002,1003和SELECT p.id as product_id, p.colors, c.id, c.color_rgb FROM products p INNER JOIN colors c ON (CONCAT(',', p.colors, ',') LIKE CONCAT('%,', c.id, ',%')) ORDER BY p.id, c.id ASC p.colors

例如:,1001,1002,1003,(产品)%,1001,%(颜色)

{{1}}

答案 1 :(得分:1)

如果我没有犯错,这应该可以胜任

如果您想与字符串中的任何颜色匹配,可以使用LIKE

SELECT * 
FROM products
JOIN colors ON (product.colors LIKE CONCAT('%,', colors.id, ',%') OR product.colors LIKE CONCAT(colors.id, ',%') OR product.colors LIKE CONCAT('%,', colors.id) OR product.colors = colors.id)

我认为这应该有效,但目前还不能自己测试。

相关问题