Mysql 变量等于WHERE子句中当前行-列值的SQL请求
嗨,我刚注册问这个问题,因为我在一些研究后没有找到答案: My table My_table有几列,但这里只有两个内容:id integer、主键。。。以及包含一个或多个{number:number}的子变量varchar,如下面的示例所示 id |儿童 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值。 我试过: 从my_表中选择* 其中children=CONCAT'{',my_table.id',:',my_table.id',} 这显然没有任何回报。。。 我仍在搜索,但我想一些更有经验的用户会有一个解决方案:Mysql 变量等于WHERE子句中当前行-列值的SQL请求,mysql,sql,Mysql,Sql,嗨,我刚注册问这个问题,因为我在一些研究后没有找到答案: My table My_table有几列,但这里只有两个内容:id integer、主键。。。以及包含一个或多个{number:number}的子变量varchar,如下面的示例所示 id |儿童 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} 您可以看到,对于任何已选择的行,列子级将始终至少包含一
EDIT1:我在查询中写了“=”而不是“:”,但从未注意到它xD谢谢。查询现在是正确的,并按预期工作。您的方法应该可以工作。你肯定还缺少其他一些字符 以下是另一种方法:
where children like '%{%' and
children not like '%{%{%' and
children like concat('%"', id, '":%') and
children like concat('%:"', id, '"%')
这只是比较模式的每个部分
您也可以尝试:
WHERE children LIKE CONCAT('%{"', my_table.id, '":"', my_table.id, '"}%') AND
children NOT LIKE '%{%{%';
最可能的问题是字符串开头或结尾的空格或其他字符。这允许这些,但不允许列表中有多个项目。我同意非常糟糕的db设计通知 您的问题可能很简单-请参见concat函数中的更改
SELECT * FROM my_table
WHERE children=CONCAT('{"', my_table.id, '":"', my_table.id, '"}')
选择ID不匹配的所有记录如果您有一个等号,则它必须是冒号:
SELECT *
FROM my_table
WHERE children NOT LIKE CONCAT('%{"', my_table.id, '":"', my_table.id, '"}%');
选择只有一对的所有记录:
SELECT *
FROM my_table
WHERE children NOT LIKE '{%{%';
如果你想得到一个统一的结果,请以某种方式将两者结合起来:-存储格式化数据的db设计非常糟糕。你在查询中将a:与a=混淆了。这不是我的数据库,我必须处理已经存在的内容。tho:/格式化数据是自动生成的,而不是人工填充的。不,问题不是空格,但是简单地说,分隔符应该是冒号而不是等号:-我选择了你的答案,因为这是导致这个错误的打字错误,谢谢你的帮助!