我需要在(X)'中执行'搜索X的值是表中逗号分隔的值列表。
表1:
itemId colors(nvarchar)
1 1, 3
2 2
表2:
colorId colorName
1 Red
2 Yellow
3 Blue
我正在寻找这种输出......
itemId colorName
1 Red
1 Blue
我试过了,但我认为内部Select需要返回多行才能正常工作,而不是一行的值是逗号分隔值。
select itemId, colorName
from Table1 t1
left join Table2 t2 on t2.colorId in (select colors from Table1 where itemId = 1)
where itemId = 1;
答案 0 :(得分:0)
可以使用find_in_set
select itemId, colorName
from Table1 t1
left join Table2 t2 on find_in_set(t2.colorId , t1.colors) > 0
where itemId = 1;
http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set
答案 1 :(得分:0)
在规范化的名称中,您应该将table1转换为
itemid | colorid
-------+--------
1 | 1
1 | 3
2 | 2
这些以逗号分隔的字段不仅令人讨厌更新,而且find_in_set是我将尽可能避免的那些函数之一。 (因为有效地你在字符串中搜索一个数字,这通常意味着搜索字符串,这比仅使用建议的表并添加有用的索引效率低)
无论如何,如果您更改table_1,查询将是:
SELECT t1.itemid, t2.colorname
FROM table1 t1
LEFT JOIN table2 t2 USING (colorid)
WHERE t1.itemid=1
ORDER BY t1.itemid
如果您有任何机会需要颜色名称列表:
SELECT t1.itemid, GROUP_CONCAT(t2.colorname)
FROM table1 t1
LEFT JOIN table2 t2 USING (colorid)
WHERE ...
GROUP BY t1.itemid
将返回元组(1,“红色,蓝色”)和(2,“黄色”)。
(与GROUP_CONCAT(t2.colorid)
类似)