我有一个看起来像这样的查询:
SELECT a, b, c, (SELECT d from B limit 0,1) as d FROM A WHERE d >= 10
当我运行不带where子句的查询时,但是当我添加where子句时,查询失败,我得到了想要的结果。
where
有人建议如何解决吗?
您不能在WHERE子句中使用列别名。
WHERE
因此,您可以将查询包装在外部选择中,然后在其中应用条件
SELECT * FROM ( SELECT a, b, c, (SELECT d FROM B LIMIT 0,1) d FROM A ) q WHERE d >= 10
或者您可以在HAVING子句中引入该条件
HAVING
SELECT a, b, c, (SELECT d FROM B LIMIT 0,1) d FROM A HAVING d >= 10
还有另一种方法是CROSS JOIN在WHERE条款中使用和应用您的条件
CROSS JOIN
SELECT a, b, c, d FROM A CROSS JOIN ( SELECT d FROM B LIMIT 0,1 ) q WHERE d >= 10
这是上述所有查询的 SQLFiddle 演示。