2016-07-18 8 views
2

Hier ist die Dinge, ich will Tisch beizutreten 'responsibilities' mit Feldern Name, Direct, Supervise:Alte Spalte von ausgewählter Ergebnistabelle in MYSQL

Name | Direct | Supervise 
ABC 2  4 

und Tabelle 'Positionen' mit positionCode, positionID:

positionCode | positionID 
    HR/HRM   2 
    HR/MN   4 

Die ausgewählte Ergebnistabelle wird etwas wie dieses sein.

Name | Direct | Supervise 
ABC HR/HRM HR/MN 

Die 'Direct' und 'Supervise' Spalte sollte positionCode von Positionen 'Tabelle sein. Gibt es eine All-in-One-Abfrage, um dieses Ergebnis auszugeben? Oder muss ich 2 mal abfragen?

+0

Sie schließen sich an Die Tabelle zweimal mit verschiedenen Namen und verschiedenen Spalten und Sie erhalten das Ergebnis leicht –

Antwort

2

arbeiten ich glaube, Sie responsibilities zweimal an die positions Tabelle beitreten können:

SELECT r.Name, 
     COALESCE(p1.positionCode, 'Direct is N/A') AS Direct, 
     COALESCE(p2.positionCode, 'Supervise is N/A') AS Supervise 
FROM responsibilities r 
LEFT JOIN positions p1 
    ON r.Direct = p1.positionID 
LEFT JOIN positions p2 
    ON r.Supervise = p2.positionID 

Folgen Sie dem Link unten für eine laufende Demo:

SQLFiddle

+1

In Verantwortlichkeiten Tabelle gibt es keine positionCode Spalte so wird Unknown Spalte 'r.positionCode' in 'Feldliste erhalten 'Fehler –

+0

Der Code funktioniert gut für mich, wenn ich p1, p2 Position Code in Auswahl hinzufügen. Wie auch immer, danke, dass du mir das Licht zeigst. –

+0

@QuangAnhChu Ich habe die Codespaltenauswahl mit 'COALESCE()' eingepackt, für den Fall, dass eine bestimmte Verantwortung keine verfügbaren Positionen hat. In diesem Fall würde die alternative Nachricht (z.B. Direkt ist N/A) dem Benutzer angezeigt werden. –

0

Versuchen folgende Abfrage Es sollte

select R.Name,(select P.positionCode where R.Direct=P.positionID) as 
Direct,(select P.positionCode where R.Supervise=P.positionID) as 
Supervise from Responsibilites R, Positions P; 
+1

Eine regelmäßige Join würde viel besser aussehen als Unterabfragen –

1

Diese Abfrage,

SELECT r.Name, 
     p1.positionCode AS Direct, 
     p2.positionCode AS Supervise 
FROM responsibilities r 
LEFT JOIN positions p1 
    ON r.Direct = p1.positionID 
LEFT JOIN positions p2 
    ON r.Supervise = p2.positionID 

Ausgang: SEE SQLFiddle DEMO

0

Prüfung für den Nachweis dieser SQL Fiddle, dass diese Abfrage funktioniert:

http://sqlfiddle.com/#!9/13845c/4/0

Grundsätzlich sieht die Abfrage wie folgt:

SELECT r.Name, p1.positionCode As Direct, p2.positionCode as Supervise 
FROM responsibilities r 
LEFT JOIN positions p1 ON r.Direct = p1.positionID 
LEFT JOIN positions p2 ON r.Supervise = p2.positionID 
Verwandte Themen