Full Join con 3 tabelle

domenica 19 settembre 2010 - 17.51

albedo Profilo | Junior Member

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
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5