PDA

View Full Version : [SQL]select, join o union


RaouL_BennetH
13-07-2009, 12:58
Ciao a tutti :)

Chiedo scusa per il titolo un pò criptico ma stamane un mal di testa coi fiocchi mi impedisce di ragionare e scrivere con calma :(

Il mio problema è questo:

Ho diverse viste che hanno un campo in comune (un id).

Ora vorrei selezionare tutti i campi di queste viste.

Mi spiego meglio:


SELECT * from vista1, vista2, vista3. vista4
WHERE
campoID uguale per tutte le viste


Come posso esprimere questo concetto in sql ?

Grazie mille :)

RaouL.

british
13-07-2009, 13:58
Ciao a tutti :)
Ho diverse viste che hanno un campo in comune (un id).

Ora vorrei selezionare tutti i campi di queste viste.

Mi spiego meglio:


SELECT * from vista1, vista2, vista3. vista4
WHERE
campoID uguale per tutte le viste





Fai un join sull'attributo comune delle diverse viste.

Ricordati che il join agisce sulle "colonne": in pratica "decori" le colonne delle righe della prima tabella con le colonne delle righe della seconda che verificano il criterio di join. (e viceversa)

Diversamente l'union (così come l'intersect) agisce insiemisticamente sulle righe: incolli ( nel caso dell'union) le righe della tabella2 sotto le righe della tabella1

ciao!

british

malocchio
14-07-2009, 15:30
Fai un join sull'attributo comune delle diverse viste.

Ricordati che il join agisce sulle "colonne": in pratica "decori" le colonne delle righe della prima tabella con le colonne delle righe della seconda che verificano il criterio di join. (e viceversa)

Diversamente l'union (così come l'intersect) agisce insiemisticamente sulle righe: incolli ( nel caso dell'union) le righe della tabella2 sotto le righe della tabella1

ciao!

british

Esattamente, tradotto in codice:
SELECT
*
FROM
vista1 AS v1,
JOIN vista2 AS v2 ON v1.id = v2.id
JOIN vista3 AS v3 ON v1.id = v3.id
eccetteraecceteraeccetera
Occhio che se le viste hanno anche solo un nome di colonna uguale allora devi specificare tutte le colonne con i relativi alias, al posto dell'* dopo SELECT, altrimenti ti viene dato errore.

ckingpin
05-08-2009, 15:50
usiamo gli alias di vista per rendere piu compatta l'istruzione e facciamo tre uguaglianze tra le 4 viste, risultato:

SELECT * from vista1 a, vista2 b, vista3 c, vista4 d
WHERE
a.campoID = b.campoID
and b.campoID = c.campoID
and c.campoID = d.campoID;