mysql - 用于获取行的 SQL 查询,其 id 在同一行的列中提到

标签 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 是主键。是否可以从用特殊字符分隔的列中读取各个值?

最佳答案

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

我使用 group concat 将所有行放入一个大数据集中,以便我们可以简单地检查 ID 是否存在。但是,我不确定 group_concat 与已经具有 , 分隔值的集合数据类型的配合效果如何...

在大型数据集上,我会担心性能。从长远来看,最好的选择是标准化数据。但如果这不是一个选择......

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;

关于mysql - 用于获取行的 SQL 查询,其 id 在同一行的列中提到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36743869/

相关文章:

mysql - 我想知道 mysql pdo json 的良好语法

mysql - 存储过程不返回记录

mysql - JOOQ MySQL TEXT 数据类型

sql - 在INNER JOIN上返回一行

sql - TSQL 月度报告按组求和

sql - Oracle:获取除一行之外的所有行

mySQL 将 ASCII 排序为 INT

mysql - AWS Lambda - 访问公共(public) AWS RDS MySQL

sql - VSTS 构建不会拾取 dacpac 文件(云中的托管代理)

.net - 产生xml输出的sql查询