SQL使用where子句中的subselect列

时间:2013-08-03 05:49:50

标签: mysql sql where-clause subquery

我的查询看起来像这样:

SELECT a, b, c,
    (SELECT d from B limit 0,1) as d
FROM A
WHERE d >= 10

当我在没有where子句的情况下运行查询时,我得到了我想要的结果,但是当我添加where子句时,查询失败。

有人有建议如何解决这个问题吗?

2 个答案:

答案 0 :(得分:44)

您不能在WHERE子句中使用列别名。

所以你要么将你的查询包装在外部选择中并在那里应用你的条件

SELECT * 
  FROM
(
  SELECT a, b, c,
    (SELECT d FROM B LIMIT 0,1) d
  FROM A
) q
 WHERE d >= 10

或者您可以在HAVING子句中引入该条件而不是

SELECT a, b, c,
    (SELECT d FROM B LIMIT 0,1) d
  FROM A
HAVING d >= 10

另一种方法是使用CROSS JOIN并在WHERE子句

中应用您的条件
SELECT a, b, c, d
  FROM A CROSS JOIN 
(
  SELECT d FROM B LIMIT 0,1
) q
 WHERE d >= 10

以上是所有上述查询的 SQLFiddle 演示。

答案 1 :(得分:1)

这是你想要的吗?

SELECT a, b, c,
    B.d
FROM A, (SELECT d from B limit 0,1) B
WHERE B.d >= 10