我想要检索这个:
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)
答案 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
中的每个匹配行生成至少一个结果集行。