PDA

View Full Version : banale query con riferimento


Gremo
14-02-2006, 23:51
ciao a tutti,
avrei bisogno di un aiuto con una query di ricerca:


Un libro ha facoltativo un codice che fa riferimento ad un progetto:
-tabella "libri" con un campo codice2, che può essere o NULL oppure un intero (fa riferimento a progetti, ma NON è FK)
-tabella "progetti" con campo codice1, un intero

se faccio la query con "SELECT * FROM libri,progetti WHERE codice1=codice2" ovviamente mi viene restituito un insieme vuoto se tutti i miei libri non hanno codice; in ogni caso, la ricerca avviene solo per i progetti che hanno un codice.

come risolvere facilmente il problema?
escludendo codice1=codice2 la ricerca avverrebbe su prodotto delle due tabelle, quindi anche per tutti i campi di "progetti", cosa che vorrei evitare

grazie per l'aiuto!! :)

buttarelli
15-02-2006, 07:32
SELECT
<I CAMPI CHE TI INTERESSANO>
FROM
LIBRI
LEFT OUTER JOIN PROGETTI
ON LIBRI.CODICE2 = PROGETTI.CODICE1

Questa query estrae tutti i record della tabella LIBRI e solo i record della tabella PROGETTI collegati alla tabella LIBRI.

Spero di esserti stato d'aiuto.

Ciao

Gremo
15-02-2006, 16:03
SELECT
<I CAMPI CHE TI INTERESSANO>
FROM
LIBRI
LEFT OUTER JOIN PROGETTI
ON LIBRI.CODICE2 = PROGETTI.CODICE1

Questa query estrae tutti i record della tabella LIBRI e solo i record della tabella PROGETTI collegati alla tabella LIBRI.

Spero di esserti stato d'aiuto.

Ciao

un GRAZIE ENORME :) ;)

l'avevo anche studiato a basi dati :O :muro: ma left outer cosa fa di preciso?

buttarelli
16-02-2006, 07:40
L'INNER JOIN restituisce le righe delle tabelle se c'è un legame, altrimenti non le mostra.

Il LEFT OUTER JOIN restituisce tutte le righe della prima tabella, anche se non ci sono corrispondenze nella seconda tabella.

Il RIGTH OUTER JOIN restituisce tutte le righe della seconda tabella, anche se non ci sono legami con la prima.