一尘不染

where子句中subselect的SQL使用列

sql

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

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

当我运行不带where子句的查询时,但是当我添加where子句时,查询失败,我得到了想要的结果。

有人建议如何解决吗?


阅读 144

收藏
2021-03-17

共1个答案

一尘不染

您不能在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 JOINWHERE条款中使用和应用您的条件

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

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

2021-03-17