Mysql不存在连接表

时间:2016-04-30 23:49:16

标签: 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

我尝试不存在但却出错的地方。

这也不起作用

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)

1 个答案:

答案 0 :(得分:0)

您正在使用20世纪后期加入表格的方式:

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

在MySQL中,以这种方式表达LEFT JOIN是不可能的,因此如果您的连接条件失败,则会从结果集中禁止行。

相反,你应该使用这种模式

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

对于您的查询,它可能如下所示:

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'

这将为student中的每个匹配行生成至少一个结果集行。