擷取 PostgreSQL 中遺失的 IP 位址
本指南示範了幾種識別 PostgreSQL 資料庫中 login_log
表中存在但 ip_location
表中不存在的 IP 位址的方法。
方法一:NOT EXISTS
通常被認為是 PostgreSQL 中最有效的方法:
<code class="language-sql">SELECT ip FROM login_log l WHERE NOT EXISTS ( SELECT 1 -- A simple SELECT is sufficient here FROM ip_location WHERE ip = l.ip );</code>
方法二:LEFT JOIN
/IS NULL
簡潔且有效率的替代方案:
<code class="language-sql">SELECT l.ip FROM login_log l LEFT JOIN ip_location i USING (ip) -- Equivalent to ON i.ip = l.ip WHERE i.ip IS NULL;</code>
方法三:EXCEPT
一種緊湊的方法,但對於複雜查詢不太靈活:
<code class="language-sql">SELECT ip FROM login_log EXCEPT ALL -- `ALL` preserves duplicates, potentially improving speed SELECT ip FROM ip_location;</code>
方法四:NOT IN
由於 NULL
值的潛在問題,請謹慎使用:
<code class="language-sql">SELECT ip FROM login_log WHERE ip NOT IN ( SELECT DISTINCT ip -- `DISTINCT` is optional FROM ip_location );</code>
效能最佳化
查詢效能因資料量和資料表索引而異。 NOT EXISTS
、LEFT JOIN
和 EXCEPT
通常提供卓越的性能。 確保兩個表的 ip
列上都有適當的索引,以獲得最佳結果。
以上是如何在 PostgreSQL 中有效率地從一個表中選擇另一個表中不存在的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!