我正在尝试获取那些 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 function 对于 set数据类型与 group_concat 结合使用(可能不需要交叉连接,但我喜欢它,因为它只计算一次集合,而不是每行计算一次......)
我使用 group 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;
关于mysql - 用于获取行的 SQL 查询,其 id 在同一行的列中提到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36743869/