24

我有一个看起来像这样的查询:

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

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

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

4

2 回答 2

52

您不能在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演示。

于 2013-08-03T06:05:44.093 回答
0

这是你想要的吗?

SELECT a, b, c,
    B.d
FROM A, (SELECT d from B limit 0,1) B
WHERE B.d >= 10 
于 2013-08-03T05:52:36.810 回答