MySQL:在WHERE中引用SELECT子查询别名

时间:2014-05-20 06:06:59

标签: mysql sql

如果我想在查询的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次,并希望我改变了所有这些..

2 个答案:

答案 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