2016-04-30 8 views
1

に参加する存在ではない私は、この取得したい:MySQLはテーブル

 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 

をしかしそれらが存在していけない場合:

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 

私は存在するが、それはエラーを与えていない場所をしてみてください。

もこのdoesnot作業

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

*存在しない場合*はあまり明確ではありません。 'studentusername = 't''と一致する行がない場合は、あなたが意味するものと仮定します。明確にすることはできますか? –

答えて

0

あなたがテーブルを結合の後半20世紀の方法を使用している:MySQLで

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

をので、もしそれが、LEFT JOINそのように表現することは不可能です結合基準が失敗すると、結果セットから行が除外されます。これはstudentに一致する各列のための少なくとも1つの結果セットの行を生成します

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' 

代わりに、それは次のようになりますあなたのクエリの場合、このパターン

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

を使用する必要があります。