【问题标题】:MySQL query nested queryMySQL查询嵌套查询
【发布时间】:2011-12-20 21:01:36
【问题描述】:

我正在尝试在 MySQL (phpmyadmin) 上和通过 PHP 运行嵌套查询,两者都导致相同的输出不正确。

注意:由于项目的敏感性,表名已被剪裁

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

这将返回零行,尽管每个查询单独给出如下有效输出

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

提供所需的输出,当用于主查询的第一部分时,此输出也提供所需的内容。请帮忙。

【问题讨论】:

  • 必须非常敏感,如果表名本身就可以泄露它。 :)

标签: php mysql


【解决方案1】:

不要用引号括起来。而是将其括在括号中:

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

【讨论】:

  • 刚刚想通了:)。谢谢。我会在两分钟内标记为正确答案(这里有规则)
【解决方案2】:

您的嵌套查询错误,应该如下所示:

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

在您的情况下,您将 table1.ID 与包含第二个查询的字符串进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多