2016-08-03 10 views
0

ich eine SQL Server-Datenbank haben, die zwei Tabellen hatTabellen verbunden ohne gemeinsame Felder

Client-Tabelle

Name Employment Race 
Ronald 867   452 
Arnold 845   123 

Lookup Tabelle

lookup_id Detail 
867   Unemployed 
845   Part time employed 
452   White 
123   Black 

Die numerische Eingaben an den primären Punkt Schlüssel der Lookup-Tabelle namens lookup_id. Korrespondierend mit jeder lookup_id (867,856 etc.) ist die eigentliche Beschreibung der Beschäftigung oder des Rennens in Text - Arbeitslos, Weiß usw. Mehr Kundenfelder folgen der gleichen Referenzierung.

Das Feld lookup_id selbst existiert jedoch nicht in der Client-Tabelle. Es scheint mir, dass die beiden Tabellen ohne eine PK, FK-Referenz verknüpft sind. Ist das möglich? Übergeben Sie einen Schlüsseleintrag direkt in ein Feld, um Tabellen zu verbinden? Wie frage ich diese Tabellen zusammen?

+1

Huh? Sieht für mich aus, als wäre die fehlende Säule gleich da ... namens Employment. –

+0

Bearbeitet: Mehrere Client-Felder haben numerische Verweise auf Lookup-ID – AS91

+0

Ich denke, das Problem hier ist, dass manchmal Leute hängen über Joins und denken, es muss ein Fremdschlüssel für die Verbindung zur Arbeit eingerichtet werden. Zum Glück ist das nicht der Fall. –

Antwort

1

Sie können das über eine Abfrage wie folgt tun.

neue Abfrage:

SELECT Name, L1.Detail AS Employment, L2.Detail as Race 
FROM Client C LEFT OUTER JOIN Lookup L1 
    ON C.Employment=L1.lookup_id 
LEFT OUTER JOIN Lookup L2 
    ON C.Race=L2.lookup_id 

alte Abfrage:

SELECT Name, Detail 
FROM Client C LEFT OUTER JOIN Lookup L 
ON C.Employment=L.lookup_id 

A FK haben müssen nicht denselben Namen wie PK in der FK-Tabelle, wie hier Beschäftigung und Rennen Spalten fremd sind Schlüsselwert für Lookup.

Auch Sie sollten, müssen aber nicht unbedingt eine FK PK Beziehung zwischen Tabellen definiert haben. Dies ist eine gängige Praxis im Data Warehousing.