2013-10-13 10 views
11

Non essendo questo il mio lavoro, ho ancora pochissime conoscenze di SQL, la mia domanda è di ottenere indicazioni su come affrontare questo problema. Spero che la domanda non sia troppo generica o priva di significato:Come ottenere valori di riferimento da un'altra tabella?

Ho diverse tabelle in un db. Pochi di loro sono tabelle di base, elenco di paesi, elenco di clienti e così via. Queste tabelle di base vengono utilizzate per supportare i valori in dropDownList su altre griglie in cui gli utenti utilizzano valori preimpostati per determinati campi e compilano anche altri campi manualmente. Qualcosa di simile a questo:

enter image description here

Ora, sto lavorando su un rapporto dinamico che punta al tavolo dove ho bisogno di ottenere i valori reali e non i riferimenti.

come ho detto, il problema che ho è che quei valori preimpostati in quel particolare tavolo sto lavorando, sono id_references (id_Country, id_Customer, ..), mentre ho bisogno del valore reale che rappresentano. Cosa devo fare per ottenere i valori attuali? Se metto il mio rapporto su tabelle diverse, perdo il significato/collegamento tra i record.

+6

Se si dispone di non ancora fatto, leggi su ['JOIN's] (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html). Nel tuo caso specifico dovrai "INTERESSARE UNIRE" la tua tabella "principale" a tutte le tabelle di ricerca richieste. –

+0

@ PM77-1 Grazie per il riferimento. Saltando sulla lettura ora. – FeliceM

+4

Se si desidera acquisire familiarità con i JOIN di base, suggerisco di seguire gli esercizi [SQLZoo] (http://sqlzoo.net/wiki/The_JOIN_operation). E se hai ancora problemi in seguito, sentiti libero di tornare mostrando ciò che hai provato e in che modo non ha raggiunto i tuoi obiettivi. –

risposta

13

per esempio se si sta cercando di ottenere il nome di un paese utilizzando country_id in questa tabella Progetto mostrato nella sua interrogazione, Si potrebbe fare qualcosa di simile

SELECT C.CountryName_Colummn, C.SomeOtheColumn, ...... 
FROM Projects P INNER JOIN Countries C 
ON P.id_Country = C.id_Country 
WHERE SomeColum = 'Your Condition' 

1) clausola SELECT si selezionano le colonne avete bisogno in il tuo set di risultati.
2) DAL MIO/I NOME/I Nome/i
3) Clausola ON definisce la relazione tra le tabelle La tabella Say Projects ha una colonna id_Country che fa riferimento a id_Country nella tabella Paesi definisce la relazione tra queste due tabelle.
4) Dopo aver selezionato l'elenco di colonne, Origine dei dati (tabelle), Loro relazioni (Su clausola), è possibile filtrare il numero di righe di ritorno dalla query, come si può qualcosa come id_Country
WHERE C.CountryName = 'UK' restituirà risultati solo dal Regno Unito.
5) In from Clause le lettere "C" e "P" sono alias quindi non è necessario digitare nuovamente i nomi completi della tabella n, rendendo il nostro codice più semplice e più facile da leggere e correggere.

Indipendentemente dal numero di tabelle che è necessario unire per ottenere i dati richiesti, purché sia ​​possibile definire la relazione tra loro nella query, dovrebbe funzionare correttamente. SQL Server raramente si troveranno tutti i dati richiesti in una tabella, normalmente si uniranno 2-3 tabelle o più tabelle. Per esempio volete un po 'di dati che è presente in 3 diverse tabelle si sarebbe unito a loro tutti e tre in una query qualcosa di simile ...

SELECT C.CountryName_Colummn, C.SomeOtheColumn, ...... 
FROM Projects P INNER JOIN Countries C 
ON P.id_Country = C.id_Country 
INNER JOIN Table_3_Name T3 
ON T3.CommonColumn = P.SomeCommonColumn (it will be a common column between table 3 and Projects OR Countries) 
WHERE SomeColum = 'Your Condition' 

Ma si ha realmente bisogno di guardare in join come si può fare diversi tipi di join tra tabelle, Hers in questo esempio ho usato INNER JOIN che restituisce solo le righe corrispondenti tra tutte queste tabelle, potresti fare LEFT JOIN o RIGHT JOIN.
LEFT JOIN restituisce tutte le righe dalla tabella sul lato SINISTRA della parola chiave JOIN e solo le righe corrispondenti da altre tabelle.
RIGHT JOIN restituisce tutte le righe dal lato destro della parola chiave JOIN e solo le righe di manting da altre tabelle.

query con colonne solo desiderati

Select customers.customer_name, Products.Product_type, Manufacturers.Manuf_name 
from Projects inner join customers 
on  customers.cust_id= Projects.proj_cust_id 
inner join Products 
on  Products.prod_id= Projects.proj_prod_id 
inner join Manufacturers 
on  Manufacturers.man_id= Projects.proj_man_id 

Facendo uso di Alias ​​vi darà esattamente lo stesso reuslt ma facile da leggere il codice provare anche questo ....

Select C.customer_name, Prod.Product_type, M.Manuf_name 
from Projects Proj inner join customers C 
on  C.cust_id= Proj.proj_cust_id 
inner join Products Prod 
on  Prod.prod_id= Proj.proj_prod_id 
inner join Manufacturers M 
on  M.man_id= Proj.proj_man_id 
+0

Poiché ho 3 di quelle situazioni su una tabella che richiede l'inner join (prod, cuts, man) ad altre 3 tabelle, dovrei fare 3 query (iniziando con select, o combinarle tutte? – FeliceM

+0

Ma penso che tu davvero bisogno di fare un po 'di studio e non è poi così difficile, se lavorerai su sql in futuro avrai davvero bisogno di capire bene i join perché non riesco a pensare a una query dello scorso anno o giù di lì in cui tutti i dati Avevo bisogno di essere in un tavolo :) –

+0

Questo è concesso. Sono occupato a studiarlo. Grazie. – FeliceM

Problemi correlati