2016-04-30 11 views
1

Ich möchte diese abzurufen:Mysql existiert keine Tabellen beitreten

 SELECT t.trainingID,trainingEvaluation, 
    trainingAim, trainingHood, trainingExplanation, behaviorID, 
     trainingTotalQuestion, 
     trainingOK, trainingCreateTime 
     FROM training t, trainingset ts, student s 
     WHERE s.studentid = ts.studentid and 
studentusername = 't' and t.trainingid = ts.trainingid 

aber wenn diese nicht existieren:

SELECT distinct trainingResponseScore 
     FROM training t, trainingset ts, student s,trainingresponse tr 
     WHERE ts.studentid = tr.studentid and studentusername = 't' 
and s.studentid = ts.studentid 
    and tr.trainingid = ts.trainingid 

ich versuche, wo nicht vorhanden ist, aber es gibt Fehler.

und auch dieses doesnot Arbeit

SELECT t.trainingID,trainingEvaluation, trainingAim, trainingHood, trainingExplanation, behaviorID, trainingTotalQuestion, 
trainingOK, trainingCreateTime 
FROM training t, trainingset ts, student s WHERE s.studentid = ts.studentid and studentusername = 't' and t.trainingid = ts.trainingid and t.trainingid not in ( SELECT distinct trainingResponseScore 
     FROM training t, trainingset ts, student s,trainingresponse tr 
     WHERE ts.studentid = tr.studentid and studentusername = 't' 
and s.studentid = ts.studentid 
    and tr.trainingid = ts.trainingid) 
+0

* wenn diese nicht existieren * ist nicht sehr klar. Ich nehme an, Sie meinen, * wenn keine Zeilen mit 'studentusername = 't'übereinstimmen. Könntest Du das erläutern? –

Antwort

0

Sie den späten 20. Jahrhundert verwenden Art und Weise des Verbindens Tabellen:

FROM table1, table2 WHERE table1.col = table2.col 

In MySQL es unmöglich ist, ein LEFT JOIN auf diese Weise zum Ausdruck bringen, so dass, wenn Ihre Join-Kriterien schlagen fehl, die Zeilen werden von Ihrer Ergebnismenge unterdrückt.

Stattdessen sollten Sie dieses Muster verwenden

FROM table1 
    LEFT JOIN table2 ON table1.col = table2.col 

Für Ihre Abfrage, es könnte wie folgt aussehen:

SELECT t.trainingID,trainingEvaluation, 
     trainingAim, trainingHood, trainingExplanation, behaviorID, 
     trainingTotalQuestion, 
     trainingOK, trainingCreateTime 
    FROM student s 
    LEFT JOIN trainingset ts ON s.studentid = ts.studentid 
    LEFT JOIN student s   ON t.trainingid = ts.trainingid 
    WHERE studentusername = 't' 

Dies wird in student für jede abgestimmte Reihe mindestens eine Ergebnismenge Reihe produzieren.