2016-05-15 18 views
0

Hier ist, was ich zur Zeit habe:Wählen Sie aus einer Tabelle eine wahrheitsgemäße IF-Bedingung, wählen Sie eine andere unter FALSE aus?

SELECT *, CASE WHEN chat.user_type = 's' 
    THEN (SELECT name FROM students WHERE students . id = chat . user_id) AS name 
    ELSE (SELECT name FROM teachers WHERE teachers . id = chat . user_id) AS name 
FROM chat WHERE classroom_id = '2' ORDER BY timestamp ASC 

Aber es funktioniert nicht für mich. Ich bin mir nicht sicher, wie ich das schreiben würde, damit es den Namen aus einer von zwei Tabellen auswählen kann.

+0

Versuch sehen mit einem Join. –

+0

@ DanielA.White Würde es Ihnen etwas ausmachen zu erklären, wie? Eine gute Erklärung würde mir wirklich helfen, meinen Kopf ein für allemal zu umschließen. :) – think123

Antwort

5
SELECT *, CASE WHEN chat.user_type = 's' 
       THEN students.name 
       ELSE teachers.name 
      END AS name 
FROM chat 
LEFT JOIN students ON students.id = chat.user_id 
LEFT JOIN teachers ON teachers.id = chat.user_id 
WHERE classroom_id = '2' 
ORDER BY timestamp ASC 

oder

SELECT *, coalesce(students.name, teachers.name) AS name 
FROM chat 
LEFT JOIN students ON students.id = chat.user_id AND chat.user_type = 's' 
LEFT JOIN teachers ON teachers.id = chat.user_id AND chat.user_type = 't' 
WHERE classroom_id = '2' 
ORDER BY timestamp ASC 

Auch this great explanation of joins

Verwandte Themen