시나리오:
login_log
과 ip_location
이라는 두 개의 테이블이 있습니다. 목표는 login_log
에 있지 ip_location
하지 않은
에 기록된 모든 IP 주소를 식별하는 것입니다.
SQL 솔루션:
NOT EXISTS
<code class="language-sql">SELECT ip FROM login_log WHERE NOT EXISTS ( SELECT 1 FROM ip_location WHERE login_log.ip = ip_location.ip );</code>
login_log
ip_location
이 쿼리는 SELECT 1
의 각 IP 주소에 SELECT ip
의 해당 항목이 있는지 확인합니다. 일치하는 항목이 없으면 IP 주소가 결과에 포함됩니다. 하위 쿼리에서는
LEFT JOIN
NULL
및 LEFT JOIN
확인:ip
이 접근 방식은 ip_location
을 사용하여 테이블을 결합한 다음 NULL
의
<code class="language-sql">SELECT l.ip FROM login_log l LEFT JOIN ip_location i ON l.ip = i.ip WHERE i.ip IS NULL;</code>
EXCEPT
MINUS
(또는 일부 데이터베이스에서는 MINUS
):
<code class="language-sql">SELECT ip FROM login_log EXCEPT SELECT ip FROM ip_location;</code>
성능 고려 사항:
NOT EXISTS
LEFT JOIN
최적의 방법은 데이터베이스 시스템, 테이블 크기 및 인덱싱에 따라 다릅니다. EXCEPT
은 종종 PostgreSQL에서 잘 작동하는 반면 NOT IN
은 다른 시스템에서 효율적일 수 있습니다. ip
은 간결할 수 있지만 항상 가장 빠른 것은 아닙니다. 특히 대규모 데이터세트의 경우 속도가 상당히 느려질 수 있으므로 하위 쿼리는
위 내용은 두 테이블 사이에서 누락된 IP 주소를 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!