如果我想在查询的WHERE部分引用SELECT子查询,是否有更简单的方法来编写SQL查询?
这是我的代码:
SELECT
SUM(x) AS test,
(SELECT SUM(y) FROM other_table) AS sub_test,
(test + sub_test) AS total_sum
FROM my_database
WHERE
test <> 0 AND sub_test <> 0
代码仅用于说明:)如果我将子查询而不是别名放在
中,它就有效SELECT
SUM(x) AS test,
(SELECT SUM(y) FROM other_table) AS sub_test,
(SUM(x) + (SELECT SUM(y) FROM other_table)) AS total_sum
FROM my_database
WHERE
SUM(x) <> 0 AND (SELECT SUM(y) FROM other_table) <> 0
但是编写整个子查询xx次有点尴尬,因为子查询不仅仅是一个简单的&#34; SELECT(SUM(..))&#34; ...如果我想在子查询中改变一些东西我必须改变它xx次,并希望我改变了所有这些..
答案 0 :(得分:3)
在HAVING
上使用WHERE
子句。和
对刚刚在宝贵的列表达式上计算的值使用用户变量。
SELECT
@sx:=SUM(x) AS test,
(SELECT @sy:=SUM(y) FROM other_table) AS sub_test,
(@sx + @sy) AS total_sum
FROM my_database
HAVING
-- SUM(x) <> 0 AND (SELECT SUM(y) FROM other_table) <> 0
test <> 0 AND sub_test <> 0
答案 1 :(得分:2)
你也可以这样做:
SELECT
*
FROM
(
SELECT
SUM(x) AS test,
(SELECT SUM(y) FROM other_table) AS sub_test,
(SUM(x) + (SELECT SUM(y) FROM other_table)) AS total_sum
FROM my_database
) AS tbl
WHERE tbl.test <> 0 AND tbl.total_sum <> 0
或者您也可以这样做:
SELECT
tbl.test,
tbl.sub_test,
(tbl.sub_test+tbl.test) AS total_sum
FROM
(
SELECT
SUM(x) AS test,
(SELECT SUM(y) FROM other_table) AS sub_test
FROM my_database
) AS tbl
WHERE tbl.test <> 0 AND (tbl.sub_test+tbl.test) <> 0