检索 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中文网其他相关文章!