嗨我在mysql中执行嵌套的“select”查询。 查询是
SELECT `btitle` FROM `backlog` WHERE `bid` in (SELECT `abacklog_id` FROM `asprint` WHERE `aid`=184 )
我没有得到上述查询的预期答案。如果我执行:
SELECT abacklog_id
FROM asprint
WHERE aid
= 184
单独
我将把abacklog_id作为42,43,44,45
;
所以,如果我再次执行:
SELECT `btitle` FROM `backlog` WHERE `bid` in(42,43,44,45)
我将获得btitle scrum1 scrum2 scrum3 msoffice
但如果我合并这些查询,我只会scrum1
只剩下3 atitle
将无法获得。
答案 0 :(得分:0)
你可以尝试像跟随......
SELECT `age_backlog`.`ab_title` FROM `age_backlog` LEFT JOIN `age_sprint` ON `age_backlog`.`ab_id` = `age_sprint`.`as_backlog_id` WHERE `age_sprint`.`as_id` = 184
通过使用此查询,您将获得带循环的结果。您将能够通过使用IMPLODE函数分隔逗号来获得所有结果。
愿它对你有所帮助......如果你有任何错误,请通知我......
答案 1 :(得分:0)
您所做的是在age_sprint.as_backlog_id
中存储以逗号分隔的值,对吧?
您的查询实际上变为
SELECT `ab_title` FROM `age_backlog` WHERE `ab_id` IN ('42,43,44,45')
请注意'
功能中的IN()
。你没有得到单独的数字,你得到一个字符串。
现在,当你做
时SELECT CAST('42,43,44,45' AS SIGNED)
基本上是MySQL的隐式转换,结果是42
。这就是为什么你得到scrum1
作为结果。
您可以在此处搜索此问题的几十个答案。
您永远不应该在数据库中存储逗号分隔值。它违反了第一种正常形式。在大多数情况下,数据库处于第三范式或BCNF甚至更高。较低的正常形式仅用于某些特殊情况,以获得最佳性能,通常用于报告问题。不是实际使用数据。每个as_backlog_id
需要1行。
同样,您的主要目标应该是获得更好的数据库设计,而不是编写一些疯狂的函数来将每个逗号分隔的数字从字段中删除。