你好,刚刚注册来问这个问题,因为经过一番研究后我没有找到答案:
我的表 my_table 有几列,但这里只有两列:id(整数,主键,...)和子项(包含一个或多个 {"number":"number"}
如下面的示例所示)
id | children
0 | {"0":"0"}
1 | {"1":"1"} {"2":"2"} {"3":"3"}
2 | {"2":"2"}
3 | {"3":"3"}
4 | {"4":"4"}
5 | {"5":"5"} {"6":"6"}
6 | {"6":"6"}
您可以看到,对于任何选定的行,子列将始终包含至少一次 {"number":"number"}
,其中 'number
'等于该行的列 id 的值。
有时它包含多次出现的 {"number":"number"}
以及其他行 ID 的数字。
我想构建一个返回所有行的 SQL 查询:
- 子列中仅出现一次
{"number":"number"}
- 对于每一行,验证
{"number":"number"}
中的值'number'
是否等于该行的 ID 值。
我尝试过:
SELECT * FROM my_table
WHERE children=CONCAT('{"', my_table.id, '":"', my_table.id, '"}')
这显然没有返回任何内容...... 我仍在寻找,但我想一些更有经验的用户会有解决方案:)
编辑1:我在查询中写了“=”而不是“:”,但从未注意到它 xD 谢谢。查询现在正确并且按预期工作。
最佳答案
选择 ID 不匹配的所有记录(等号必须是冒号):
SELECT *
FROM my_table
WHERE children NOT LIKE CONCAT('%{"', my_table.id, '":"', my_table.id, '"}%');
选择仅包含一对的所有记录:
SELECT *
FROM my_table
WHERE children NOT LIKE '{%{%';
如果您想要组合结果,请以某种方式组合两者:-)
关于mysql - SQL 请求,其变量等于 WHERE 子句中的当前行列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44306315/