Etichettato: tabella

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