Creare chiavi composte tramite Join di Viste e Tabelle in MS Sql Server

La selezione di colonne/righe in SQL  tramite l’unione (JOIN) di 2 tabelle è semplice. Problema più difficoltoso è quello di unire 3 o più tabelle, evitando JOIN annidati e volendo utilizzare il risultato di una unione per costruire una chiave complessa.

OBIETTIVO:

Date 3 tabelle nominate TAB1,TAB2,TAB3 effettuare un JOIN delle 3 tabelle estrapolando solo alcune colonne comuni a tutte e tre le tabelle, modificando alcuni risultati di una tabella in stringhe personalizzate.

PROBLEMA:

Il risultato della TAB1  è una array di stringhe che deve essere convertita in stringhe del tipo (‘pippo’=’A’, ‘pluto’=’B’, ‘paperino’=’D’). Tali stringhe faranno parte di una chiave composta da associare ad alcuni campi comuni di TAB2 e TAB3. L’array è formato da 4 stringhe, ma a noi ne interessano solo 3.

SOLUZIONE:

Si crea una View della tabella  TAB1 (es. VIEW1), quindi in un SELECT successivo si uniscono  TAB1,TAB2 e TAB3 del tipo [… FROM TAB1 JOIN TAB2 ON TAB1.id=TAB2.id JOIN VIEW1 ON TAB1.id=VIEW1.id]

In pratica la Vista sostituisce la creazione di una Tabella, utile in questo caso per la manipolazione di Dati fissi o statici.

ESEMPIO:

A –  Creare la VIEW1

CREATE VIEW View1

AS

SELECT newCol =

CASE Area

WHEN ‘pippo’ THEN ‘A’

WHEN ‘pluto’ THEN ‘B’

WHEN ‘paperino’ THEN ‘C’

ELSE ‘D’

END

FROM TAB1 WHERE myid = 1 OR myid  = 2 OR myid = 4

2 – Crea la procedura completa 

CREATE PROC multijoin

AS

SELECT newCol + ‘_id  AS col1_id,

Tab2_name AS col2_name,

Tab3_value AS col3_value

FROM TAB1 JOIN TAB2 ON Tab1_id = Tab2_id JOIN VIEW1 ON Tab1_id = View1_id

 

 

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...