typestar

Encontrar filas sin coincidencia en SQL

El anti join: un outer join, y luego quedarte solo con las filas que no coincidieron.

SELECT
    c.id,
    c.name
FROM customers AS c
LEFT JOIN orders AS o
    ON o.customer_id = c.id
WHERE o.id IS NULL;

SELECT
    c.id,
    c.name
FROM customers AS c
WHERE NOT EXISTS (
        SELECT 1
        FROM orders AS o
        WHERE o.customer_id = c.id
    );

Cómo funciona

  1. LEFT JOIN rellena con NULL el lado derecho de las filas sin pareja.
  2. WHERE right.key IS NULL conserva exactamente esas filas sin coincidencia.
  3. NOT EXISTS dice lo mismo y normalmente se planifica igual.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
17
Caracteres a escribir
221
Tokens
64
Ritmo de tres estrellas
85 tpm

Al ritmo de tres estrellas de 85 tokens por minuto, este intento toma unos 45 segundos.

Escribe este fragmento

Paso 8 de 9 en Joins; paso 16 de 22 en Joins y agregación.

← Anterior Siguiente →