mysql - SQL 请求,其变量等于 WHERE 子句中的当前行列值

标签 mysql sql

你好,刚刚注册来问这个问题,因为经过一番研究后我没有找到答案:

我的表 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/

相关文章:

MySQL:使用查询对最流行的名称进行排序,但特定于每个 IP

mysql - wordpress自定义mysql查询

MySQL复杂选择与时间聚合

php - 简单的MySQL查询和比较

sql - 正或负 boolean 字段名称

mysql - mysql命令错误

mysql - MySQL 列中多次出现的计数器

php - 从 MySQL PHP 中选择

sql - 使用连接更新表,如果不存在则为 NULL

mysql - 如何获取去年的日期范围?