Как избежать подзапроса - PullRequest
2 голосов
/ 17 июня 2011

Fellows, У меня есть запрос следующим образом:

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

Я бы хотел избежать повторения подзапроса. Есть ли способ переписать мой ГДЕ как то типа

WHERE HS > 0

Или я должен превратить свой подзапрос в объединение?

Ответы [ 2 ]

6 голосов
/ 17 июня 2011

Посмотрите на предложение 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

OR

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
5 голосов
/ 17 июня 2011

Вы можете использовать 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
...