用于获取具有在同一行的列中提到的id的行的SQL查询

时间:2016-04-20 12:30:28

标签: mysql sql

我正在尝试获取我在同一个表的列中描述的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是主键。是否可以从用特殊字符分隔的列中读取单个值?

2 个答案:

答案 0 :(得分:3)

Find_In_set function 用于set数据类型与group_concat一起使用(可能不需要交叉连接,但我喜欢它,因为它计算一次而不是每行计算一次...)

我使用group concat将所有行都放入一个大型数据集中,这样我们就可以检查是否存在ID。但是,我不确定group_concat对已经具有分隔值的set数据类型的效果如何......

在大型数据集上,我会关注性能。长期最好的选择是规范化数据。但如果那不是一个选择......

Working SQL Fiddle:

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