我正在尝试获取我在同一个表的列中描述的Id的那些行。这是数据:
id layer sublayer
1 A 2, 3, 4
2 B 5
3 C NULL
4 D NULL
5 E NULL
这就是我要做的事情。 对于A层,我想获取B,C,D,其id在列子层中描述。这里id是主键。是否可以从用特殊字符分隔的列中读取单个值?
答案 0 :(得分:3)
将Find_In_set function 用于set数据类型与group_concat一起使用(可能不需要交叉连接,但我喜欢它,因为它计算一次而不是每行计算一次...)
我使用group concat将所有行都放入一个大型数据集中,这样我们就可以检查是否存在ID。但是,我不确定group_concat对已经具有分隔值的set数据类型的效果如何......
在大型数据集上,我会关注性能。长期最好的选择是规范化数据。但如果那不是一个选择......
SELECT *
FROM layer
CROSS JOIN (SELECT group_Concat(sublayer separator ',') v FROM layer) myset
WHERE FIND_IN_SET(ID, myset.v) > 0;
答案 1 :(得分:1)
试试这种方式
SELECT *
FROM layer
WHERE FIND_IN_SET(ID,(
select sublayer from table where layer='A'))>1