Domanda

Così ho chiesto a un paio di domande sull'esecuzione unisce e hanno avuto grandi risposte, ma c'è ancora una cosa che sto completamente sconcertato da.

Ho 3 tabelle. Chiamiamo loro tavolo-b, tavolo-D e la tabella-e.
Tabella-B e la quota di tavolo-d una colonna chiamata p-id.
Tabella-e e la tabella-b quota di una colonna chiamata ev-id.
Tabella-e ha anche una colonna chiamata data.
Tabella-b ha anche una colonna ID unico chiamato u-id.

Mi piacerebbe scrivere una query che restituisce u-id nelle seguenti condizioni:
1) Restriced ad un certo valore in table-e.date.
2) Dove tavolo b.p-id non corrisponde alla tabella-d.p-id.

Credo di aver bisogno di interiore tavolo-b ed e tavolo-e join sulla colonna di e-id. Ho poi che ho bisogno di eseguire una sinistra unirsi sul tavolo-d e e tavolo-b dove p-id è nullo.
Il mio problema è che io non conosco la sintassi di scrivere questa query. Io so come scrivere più join interni e so come scrivere un join sinistro. Come faccio a combinare le due cose?

Grazie mille a tutti coloro che mi sta aiutando. Sono (ovviamente!), Un novizio di database e sto lottando per ottenere la mia testa intorno ad esso tutti!

È stato utile?

Soluzione

Credo che sia qualcosa di simile:

SELECT uid
  FROM table-b
  INNER JOIN table-e
      ON table-b.ev_id = table-e.ev_id
  WHERE table-b.p_id NOT IN (SELECT p_id from table-d)

Altri suggerimenti

Basta scrivere i join uno dopo l'altro:

SELECT b.uid
  FROM b
  INNER JOIN e USING(evid)
  LEFT JOIN d USING(pid)
  WHERE e.date = :whatever
    AND d.pid IS NULL
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top