Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Full Join con 3 tabelle
domenica 19 settembre 2010 - 17.51
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
albedo
Profilo
| Junior Member
59
messaggi | Data Invio:
dom 19 set 2010 - 17:51
Buona sera, ragazzi
chi sarebbe così gentile da mostrarmi il metodo per fare una full join tra tre tabelle?
pwer il momento ho risolto con la query che segue, ma sono sicuro che utilizzando in maniera appropriata una full join, si può snellire di parecchio.
p.s: ai fini pratici una query con una full join è più o meno performante di questa?
Grazie
SELECT carichi.articolo AS art,
Isnull(esistenze.esistenza, 0) AS e,
Isnull(carichi.carico, 0) AS c,
carichi.reso AS r,
Isnull(SUM(ricavi.colli), 0) AS cl
FROM (carichi
INNER JOIN ricavi
ON carichi.id_art = ricavi.id_art
AND carichi.id_for = ricavi.id_for
AND carichi.data = ricavi.data)
INNER JOIN esistenze
ON carichi.id_art = esistenze.id_art
AND carichi.id_for = esistenze.id_for
AND carichi.data = esistenze.data
WHERE carichi.data = @DT
AND ricavi.id_for = @IF
GROUP BY carichi.data,
carichi.articolo,
esistenze.esistenza,
carichi.carico,
carichi.reso
UNION ALL
SELECT carichi.articolo AS art,
Isnull(esistenze.esistenza, 0) AS e,
carichi.carico AS c,
carichi.reso AS r,
Isnull(SUM(ricavi.colli), 0) AS cl
FROM (carichi
LEFT JOIN ricavi
ON ricavi.id_art = carichi.id_art
AND ricavi.id_for = carichi.id_for
AND ricavi.data = carichi.data)
LEFT JOIN esistenze
ON carichi.id_art = esistenze.id_art
AND carichi.id_for = esistenze.id_for
AND carichi.data = esistenze.data
WHERE ricavi.id_art IS NULL
AND esistenze.id_art IS NULL
AND carichi.data = @DT
AND carichi.id_for = @IF
GROUP BY carichi.data,
carichi.articolo,
esistenze.esistenza,
carichi.carico,
carichi.reso
UNION ALL
SELECT ricavi.articolo AS art,
Isnull(esistenze.esistenza, 0) AS e,
Isnull(carichi.carico, 0) AS c,
Isnull(carichi.reso, 0) AS r,
SUM(ricavi.colli) AS cl
FROM (ricavi
LEFT JOIN carichi
ON carichi.id_art = ricavi.id_art
AND carichi.id_for = ricavi.id_for
AND carichi.data = ricavi.data)
LEFT JOIN esistenze
ON esistenze.id_art = ricavi.id_art
AND esistenze.id_for = ricavi.id_for
AND esistenze.data = ricavi.data
WHERE carichi.id_art IS NULL
AND esistenze.id_art IS NULL
AND ricavi.data = @DT
AND ricavi.id_for = @IF
GROUP BY ricavi.data,
ricavi.articolo,
esistenze.esistenza,
carichi.carico,
carichi.reso
UNION ALL
SELECT esistenze.articolo AS art,
esistenze.esistenza AS e,
Isnull(carichi.carico, 0) AS c,
Isnull(carichi.reso, 0) AS r,
Isnull(SUM(ricavi.colli), 0)
FROM (esistenze
LEFT JOIN carichi
ON carichi.id_art = esistenze.id_art
AND carichi.id_for = esistenze.id_for
AND carichi.data = esistenze.data)
LEFT JOIN ricavi
ON esistenze.id_art = ricavi.id_art
AND esistenze.id_for = ricavi.id_for
AND esistenze.data = ricavi.data
WHERE carichi.id_art IS NULL
AND ricavi.id_art IS NULL
AND esistenze.data = @DT
AND esistenze.id_for = @IF
GROUP BY esistenze.data,
esistenze.articolo,
esistenze.esistenza,
carichi.carico,
carichi.reso
UNION ALL
SELECT ricavi.articolo AS art,
Isnull(esistenze.esistenza, 0) AS e,
carichi.carico AS c,
carichi.reso AS r,
SUM(ricavi.colli) AS cl
FROM (ricavi
LEFT JOIN carichi
ON carichi.id_art = ricavi.id_art
AND carichi.id_for = ricavi.id_for
AND carichi.data = ricavi.data)
LEFT JOIN esistenze
ON esistenze.id_art = ricavi.id_art
AND esistenze.id_for = ricavi.id_for
AND esistenze.data = ricavi.data
WHERE esistenze.id_art IS NULL
AND carichi.id_art IS NOT NULL
AND ricavi.data = @DT
AND ricavi.id_for = @IF
GROUP BY ricavi.data,
ricavi.articolo,
esistenze.esistenza,
carichi.carico,
carichi.reso
UNION ALL
SELECT ricavi.articolo AS art,
esistenze.esistenza AS e,
Isnull(carichi.carico, 0) AS c,
Isnull(carichi.reso, 0) AS r,
SUM(ricavi.colli) AS cl
FROM (ricavi
LEFT JOIN carichi
ON carichi.id_art = ricavi.id_art
AND carichi.id_for = ricavi.id_for
AND carichi.data = ricavi.data)
LEFT JOIN esistenze
ON esistenze.id_art = ricavi.id_art
AND esistenze.id_for = ricavi.id_for
AND esistenze.data = ricavi.data
WHERE carichi.id_art IS NULL
AND esistenze.id_art IS NOT NULL
AND ricavi.data = @DT
AND ricavi.id_for = @IF
GROUP BY ricavi.data,
ricavi.articolo,
esistenze.esistenza,
carichi.carico,
carichi.reso
UNION ALL
SELECT carichi.articolo AS art,
esistenze.esistenza AS e,
carichi.carico AS c,
carichi.reso AS r,
Isnull(SUM(ricavi.colli), 0) AS cl
FROM (carichi
LEFT JOIN ricavi
ON ricavi.id_art = carichi.id_art
AND ricavi.id_for = carichi.id_for
AND ricavi.data = carichi.data)
LEFT JOIN esistenze
ON carichi.id_art = esistenze.id_art
AND carichi.id_for = esistenze.id_for
AND carichi.data = esistenze.data
WHERE ricavi.id_art IS NULL
AND esistenze.id_art IS NOT NULL
AND carichi.data = @DT
AND carichi.id_for = @IF
GROUP BY carichi.articolo,
esistenze.esistenza,
carichi.carico,
carichi.reso
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !