2016-09-04 4 views
3

Hier ist mein Problem. Ich habe eine Datenbank mit 2 starken Entitäten (Event und Mitarbeiter). Jede Veranstaltung kann mehrere Mitarbeiter als Assistenten haben und hat einen Mitarbeiter als Leiter. So habe ich eine ausländische Schlüsselführer-ID in Ereignis und schuf einen schwachen Entitätsassistenten, der Angestellten und Ereignis verbindet.SQL - Generiere Spalte basierend auf der Ausgabe

Was ich will ist, dass alle Mitarbeiter Name, AdventureCode und StartDate für jedes Ereignis und ob sie Führer sind oder nicht. wie:

GR01 2016/09/18 Trudy Lee Leader 
GR01 2016/09/18 Sonia Chen Assistant 
GR01 2016/09/18 Henry Blake Assistant 
YV02 2016/09/17 John Bull Leader 

Ich habe keine Ahnung, wie Sie diese zusätzliche 4. Spalte als nicht in der Datenbank erhalten.

CREATE TABLE employee(
    empID varchar(5) PRIMARY KEY, 
    name varchar(30) 
); 

CREATE TABLE event(
    adventureCode varchar(5), 
    startDate  varchar(20), 
    leaderID  varchar(5) NOT NULL, 
    PRIMARY KEY (adventureCode,startDate), 
    FOREIGN KEY (leaderID) REFERENCES employee (empID), 
    FOREIGN KEY (adventureCode) REFERENCES adventure (adventureCode) 
); 

CREATE TABLE assistant(
    empID   varchar(10), 
    startDate  varchar(20), 
    adventureCode varchar(5), 
    PRIMARY KEY  (empID,startDate,adventureCode), 
    FOREIGN KEY  (empID) REFERENCES employee (empID), 
    FOREIGN KEY  (adventureCode,startDate) REFERENCES event (adventureCode,startDate) 
); 

Jede Hilfe wäre

Antwort

3

Sie können CASE EXPRESSION verwenden diese Spalte zu erzeugen, COALESCE() und LEFT JOIN willkommen:

SELECT e.empID, 
     e.Name, 
     COALESCE(ev.adventureCode,a.adventure_code) as adventure_code, 
     COALESCE(ev.startDate,a.startdate) as startdate, 
     CASE WHEN ev.leaderID IS NOT NULL THEN 'Leader' ELSE 'Assistant' END as pos_col 
FROM employee e 
LEFT JOIN `event` ev 
ON(ev.leaderID = e.empID) 
LEFT JOIN assistant a 
ON(e.empID = a.empID)  
+0

Ehrfürchtig die für mich gearbeitet – Ladestes

Verwandte Themen