避免子查询

Lyn*_*ler 2 sql t-sql sql-server-2005 subquery where-clause

研究员,我的查询如下:

SELECT A.ID, B.ID, (HUGE SUBQUERY) as HS
FROM TABLE_A JOIN TABLE_B ON A.ID = B.ID
WHERE (HUGE SUBQUERY) > 0
Run Code Online (Sandbox Code Playgroud)

我想避免重复子查询.有没有办法像我这样重写我的WHERE

WHERE HS > 0
Run Code Online (Sandbox Code Playgroud)

或者我必须将子查询转换为连接?

Cyr*_*don 6

看看With子句:

WITH HS AS (Huge subquery)

SELECT A.ID, B.ID, HS
FROM TABLE_A JOIN TABLE_B ON A.ID = B.ID
WHERE HS  > 0
Run Code Online (Sandbox Code Playgroud)

要么

SELECT *
FROM
(
    SELECT A.ID, B.ID, (HUGE SUBQUERY) as HS
    FROM TABLE_A JOIN TABLE_B ON A.ID = B.ID
)
WHERE HS > 0
Run Code Online (Sandbox Code Playgroud)


Joe*_*lli 5

您可以使用CTE:

WITH cteHS AS (
    SELECT xxx AS Value
        FROM Huge Subquery
)
SELECT A.ID, B.ID, cteHS.Value as HS
    FROM TABLE_A, cteHS
        JOIN TABLE_B ON A.ID = B.ID
    WHERE cteHS.Value > 0
Run Code Online (Sandbox Code Playgroud)