[英]SQL query for fetching rows with their id mentioned in a column of that same row
我试图获得那些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是主键,是否可以从以特殊字符分隔的列中读取单个值?
将find_In_set函数与group_concat结合使用以设置数据类型(可能不需要交叉连接,但我喜欢它,因为它只计算一次集合,而不是每行计算一次。)
我正在使用concat组将所有行放入一个大数据集中,因此我们可以简单地检查ID的存在。 但是,我不确定group_concat对已具有,分隔值的集合数据类型的工作情况如何...
对于大数据集,我会担心性能。 长期以来,最好的选择是对数据进行标准化。 但是如果那不是一个选择...
SELECT *
FROM layer
CROSS JOIN (SELECT group_Concat(sublayer separator ',') v FROM layer) myset
WHERE FIND_IN_SET(ID, myset.v) > 0;
尝试这种方式
SELECT *
FROM layer
WHERE FIND_IN_SET(ID,(
select sublayer from table where layer='A'))>1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.