2011-12-20 300 views
1

我试图在MySQL(phpmyadmin)和PHP上运行嵌套查询,并且两者都导致相同的输出,这是不正确的。MySQL查询嵌套查询

注:表的名字已经被削波,由于项目

SELECT * FROM `table1` WHERE ID="SELECT `field1` FROM `table2` WHERE ID=1" 

这将返回零行的敏感性,虽然每个查询单独给出如下

SELECT `field1` FROM `table2` WHERE ID=1 

给出所需的输出有效输出,并且在主要查询的第一部分中使用时此输出还提供了所需的内容。请帮忙。

+3

如果只有表名可以放弃它,则必须非常*敏感。 :) – GolezTrol 2011-12-20 21:03:19

回答

5

请勿将其放在引号中。相反,它括在括号:

SELECT * FROM `table1` WHERE ID=(SELECT `field1` FROM `table2` WHERE ID=1) 

如果多行从预期的子查询,使用WHERE ID IN (SELECT...)代替WHERE ID=(SELECT...)

你可能有一个JOIN虽然获得更好的性能:

SELECT table1.* 
FROM 
    table1 JOIN table2 ON table1.ID = table2.field1 
WHERE table1.ID = 1 
+0

只是想通了:)。谢谢。两分钟后我会标记为正确答案(规则在这里) – sikas 2011-12-20 21:04:26

2

你的嵌套查询是错误的,它应该看起来像这样:

SELECT * FROM `table1` WHERE ID in (SELECT `field1` FROM `table2` WHERE ID=1) 

在你的情况,你比较table1.ID与包含第二个查询的字符串。