Domanda

Credo che sto andando verso il basso la strada giusta con questo ... Si prega di portare con me come il mio SQL non è il massimo

Sto cercando di interrogare un database per selezionare tutto da una tabella in cui non esistono alcune cellule in un altro. Che molto non fare un sacco di senso, ma spero questo pezzo di codice

SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)

Quindi, fondamentalmente ho una tabella con l'elenco dei dipendenti e dei loro dettagli. Poi un altro tavolo con alcuni altri dettagli, compreso il loro nome. Dove c'è nome non è nella tabella eotm_dyn, significa che non c'è alcuna voce per loro, mi piacerebbe vedere esattamente chi sono, o in altre parole, vedere che cosa esattamente che manca.

La query sopra restituisce nulla, ma so che ci sono 20ish nomi mancanti così ho ottenuto, ovviamente, non è giusto.

Chiunque può aiutare?

È stato utile?

Soluzione

non ha aderito al tavolo nella query.

La vostra query originale sarà sempre tornare nulla se non ci sono record a tutti in eotm_dyn, nel qual caso verrà restituito tutto.

Supponendo che queste tabelle dovrebbe essere raggiunto sul employeeID, utilizzare il seguente:

SELECT  *
FROM    employees e
WHERE   NOT EXISTS
        (
        SELECT  null 
        FROM    eotm_dyn d
        WHERE   d.employeeID = e.id
        )

È possibile unire queste tabelle con una parola chiave LEFT JOIN e filtrare il NULL di, ma questo sarà probabilmente meno efficiente rispetto all'utilizzo di NOT EXISTS.

Altri suggerimenti

SELECT * FROM employees WHERE name NOT IN (SELECT name FROM eotm_dyn)

o

SELECT * FROM employees WHERE NOT EXISTS (SELECT * FROM eotm_dyn WHERE eotm_dyn.name = employees.name)

o

SELECT * FROM employees LEFT OUTER JOIN eotm_dyn ON eotm_dyn.name = employees.name WHERE eotm_dyn IS NULL

Si può fare un LEFT JOIN e affermare la colonna unito è NULL.

Esempio:

SELECT * FROM employees a LEFT JOIN eotm_dyn b on (a.joinfield=b.joinfield) WHERE b.name IS NULL
SELECT * from employees
WHERE NOT EXISTS (SELECT name FROM eotm_dyn)

Non restituisce tutti i record a meno che eotm_dyn è vuoto. Hai bisogno di un qualche tipo di criteri sulla SELECT name FROM eotm_dyn come

SELECT * from employees
WHERE NOT EXISTS (
    SELECT name FROM eotm_dyn WHERE eotm_dyn.employeeid = employees.employeeid
)

partendo dal presupposto che le due tabelle sono collegate da una relazione di chiave esterna. A questo punto è possibile utilizzare una varietà di altre opzioni, tra cui un LEFT JOIN. L'ottimizzatore in genere gestirli la stessa nella maggior parte dei casi, tuttavia.

Si può anche dare un'occhiata a questo riguardo, la domanda . Questo utente ha segnalato che l'utilizzo di un join migliore prestazione fornita rispetto all'utilizzo di una query sub.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top