選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

相互關聯子查詢 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

相互關聯子查詢

以下範例包含 WHERE 子句中的相互關聯子查詢;這類子查詢的資料欄與外部查詢產生的資料欄之間包含一項或多項相互關聯。在此情況下,相互關聯為 where s.listid=l.listid。針對外部查詢產生的每個資料列,子查詢會執行以限定或取消限定資料列。

select salesid, listid, sum(pricepaid) from sales s where qtysold= (select max(numtickets) from listing l where s.listid=l.listid) group by 1,2 order by 1,2 limit 5; salesid | listid | sum --------+--------+---------- 27 | 28 | 111.00 81 | 103 | 181.00 142 | 149 | 240.00 146 | 152 | 231.00 194 | 210 | 144.00 (5 rows)

不支援的相互關聯子查詢模式

查詢規劃器會使用一種查詢重寫方法,稱為子查詢解除相互關聯,在 MPP 環境中最佳化數種相互關聯子查詢模式以供執行。有幾種類型的相互關聯子查詢採用了 Amazon Redshift 無法解除相互關聯也不支援的模式。包含下列相互關聯參考的查詢會傳回錯誤:

  • 略過查詢區塊的相互關聯參考,也稱為「略過層級相互關聯參考」。例如,在下列查詢中,包含相互關聯參考的區塊和略過的區塊會以 NOT EXISTS 述詞連接:

    select event.eventname from event where not exists (select * from listing where not exists (select * from sales where event.eventid=sales.eventid));

    在此案例中略過的區塊是對 LISTING 資料表的子查詢。相互關聯參考會將 EVENT 和 SALES 資料表相互關聯。

  • 來自子查詢的相互關聯參考,它是外部查詢中 ON 子句的一部分:

    select * from category left join event on category.catid=event.catid and eventid = (select max(eventid) from sales where sales.eventid=event.eventid);

    ON 子句包含從子查詢中 SALES 對外部查詢中 EVENT 的相互關聯參考。

  • Null 敏感的相互關聯會參考 Amazon Redshift 系統資料表。例如:

    select attrelid from stv_locks sl, pg_attribute where sl.table_id=pg_attribute.attrelid and 1 not in (select 1 from pg_opclass where sl.lock_owner = opcowner);
  • 來自子查詢內的相互關聯參考,當中包含視窗函數。

    select listid, qtysold from sales s where qtysold not in (select sum(numtickets) over() from listing l where s.listid=l.listid);
  • GROUP BY 資料欄中對相互關聯子查詢結果的參考。例如:

    select listing.listid, (select count (sales.listid) from sales where sales.listid=listing.listid) as list from listing group by list, listing.listid;
  • 子查詢中使用彙整函數和 GROUP BY 子句的相互關聯參考,會透過 IN 述詞連接至外部查詢。(此限制不會套用至 MIN 和 MAX 彙整函數)。例如:

    select * from listing where listid in (select sum(qtysold) from sales where numtickets>4 group by salesid);

下一個主題:

SELECT INTO

上一個主題:

子查詢範例
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。