在mysql中嵌套“select”查询

时间:2013-05-16 11:03:09

标签: mysql phpmyadmin

嗨我在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将无法获得。

2 个答案:

答案 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行。

同样,您的主要目标应该是获得更好的数据库设计,而不是编写一些疯狂的函数来将每个逗号分隔的数字从字段中删除。