我有一個復雜的選擇查詢(Query-1),它使用 INTERSECT 執行并回傳特定列的 ID。
查詢#1:
SELECT my_id FROM my_table
INTERSECT
SELECT my_id FROM other_table;
現在還有另一個更復雜的查詢,它需要多次查詢 #1 的結果。
查詢#2:
SELECT *
FROM
(SELECT my_id, col_1, my_value
FROM my_table
WHERE my_id IN (result from query-1)
AND col_3 IN (SELECT col_3 FROM another_table1
WHERE my_id IN (result from query-1)
AND another_col IN (SELECT another_col
FROM another_table2
WHERE my_id IN (result from query-1))))
PIVOT
(MIN(my_value)
FOR(col_1) IN(1 AS name, 2 AS lastname, 3 AS address)
)
如您所見,在 query-2 中多次需要來自 query-1 的結果,我嘗試的是在需要的任何地方替換 query-2 中的整個 query-1,這會增加查詢的復雜性和可讀性。
有沒有辦法以簡單的方式做到這一點?
uj5u.com熱心網友回復:
如何使用with子句(子查詢分解子句):
with query-1 as (SELECT my_id FROM my_table
INTERSECT
SELECT my_id FROM other_table)
SELECT * FROM
(
SELECT my_id, col_1, my_value
FROM my_table
WHERE my_id IN (select id from query-1) AND col_3 IN
(SELECT col_3 FROM another_table1 WHERE my_id IN (select id from query-1) AND another_col IN
(SELECT another_col FROM another_table2 WHERE my_id IN (select id from query-1))
)
)
PIVOT (
MIN(my_value)
FOR(col_1)
IN(1 AS name, 2 AS lastname, 3 AS address)
)
uj5u.com熱心網友回復:
對于您將多次使用的任何查詢,我肯定會使用 View。
我先寫下面的代碼:
Create View Query1
as
SELECT my_id FROM my_table
INTERSECT
SELECT my_id FROM other_table;
一旦我選擇了上面的代碼,我就會執行(F5)它。這將存盤視圖。然后我將撰寫以下代碼并在您想呼叫它時執行:
Select * From Query1
或者您可以簡單地在 Query2 中使用 Query1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/316309.html
上一篇:SQL查詢花費的時間太長
下一篇:基于連續資料的行編號?
