MySql-子查询工作不正常
如果查询正确,则BubQuery始终返回空结果 第一次查询:MySql-子查询工作不正常,mysql,subquery,mysql-dependent-subquery,Mysql,Subquery,Mysql Dependent Subquery,如果查询正确,则BubQuery始终返回空结果 第一次查询: SELECT * FROM `user` WHERE user_age IN(1,22,34); SELECT GROUP_CONCAT(user_age_list) AS user_age FROM `user_detail` WHERE id='1'; SELECT * FROM `user` WHERE user_age IN(SELECT GROUP_CONCAT(user_age_list) AS user_age FR
SELECT * FROM `user` WHERE user_age IN(1,22,34);
SELECT GROUP_CONCAT(user_age_list) AS user_age FROM `user_detail` WHERE id='1';
SELECT * FROM `user` WHERE user_age IN(SELECT GROUP_CONCAT(user_age_list) AS user_age FROM `user_detail` WHERE id='1');
结果:
SELECT * FROM `user` WHERE user_age IN(1,22,34);
SELECT GROUP_CONCAT(user_age_list) AS user_age FROM `user_detail` WHERE id='1';
SELECT * FROM `user` WHERE user_age IN(SELECT GROUP_CONCAT(user_age_list) AS user_age FROM `user_detail` WHERE id='1');
第二次查询:
SELECT * FROM `user` WHERE user_age IN(1,22,34);
SELECT GROUP_CONCAT(user_age_list) AS user_age FROM `user_detail` WHERE id='1';
SELECT * FROM `user` WHERE user_age IN(SELECT GROUP_CONCAT(user_age_list) AS user_age FROM `user_detail` WHERE id='1');
结果:
我正在尝试:
SELECT * FROM `user` WHERE user_age IN(1,22,34);
SELECT GROUP_CONCAT(user_age_list) AS user_age FROM `user_detail` WHERE id='1';
SELECT * FROM `user` WHERE user_age IN(SELECT GROUP_CONCAT(user_age_list) AS user_age FROM `user_detail` WHERE id='1');
Sqlfiddle://这是一个示例表
上面的查询总是返回空行。
但是,如果每个查询单独运行,则返回结果。
真的,我不知道哪里出错了。
请更新答案或建议我
SELECT *
FROM user
WHERE user_age IN
(SELECT user_age_list user_age
FROM user_detail
WHERE id='1');
在这里你不需要小组讨论。引擎知道结果集是一个包含列表,没有concat组
它试图做的是将“1,22,34”与每个用户年龄进行比较,这就是为什么没有结果
1 <> '1,22,34'
22 <> '1,22,34'
34 <> '1,22,34'
1'1,22,34'
22 '1,22,34'
34 '1,22,34'
因此没有结果。避免使用GROUP_CONCAT
1 <> '1,22,34'
22 <> '1,22,34'
34 <> '1,22,34'
SELECT *
FROM `user`
WHERE user_age IN(SELECT user_age_list FROM `user_detail` WHERE id='1');
已更新
SELECT *
FROM `user` u
WHERE EXISTS (SELECT 1 FROM `user_detail` ud WHERE id='1' AND ud.user_age_list = u.user_age)
参见规范化。规范化您的模式。如果问题仍然存在,请参阅摆脱组concat。只需选择UsSeriaGeList表单用户用户名。请使用SqLoDeld:返回空行。它考虑单个引号中的单个值。如果“代码”>从USER细节中选择“*”,在(1,22,34)< /代码>中,用户选择了什么?在我看来,问题可能在于该表中数据的结构……我得到了以下结果:
1,22,34
然后where ID='1'
的where子句导致子查询不返回任何记录。为什么在用户年龄列表中需要ID=1?此时,我需要将此行为视为SQLFiddle.com。我不明白为什么这个或@JayDipJ的解决方案不起作用。返回空结果。user\u age\u list
列中存在什么样的数据?子查询将返回“12234”,而不将GROUP\u CONCAT“12234”作为单个值,或者在单独的行中返回每个年龄。您的子查询将返回此值<代码>用户年龄列表作为单独的行。