我有三张桌子,cours,documents和cours_document。
我想选择所有没有文件的课程。
我试过这个:
SELECT cours.id AS cid, cours.name AS cname, DATE_FORMAT(cours.date,"%H:%i") AS cdate, DATE_FORMAT(cours.date,"%a") AS jour,sessions.id AS sid,sessions.name AS sname,sessions.restant,session_cours.session_id,session_cours.cours_id, ISNULL(cours.video_id) AS isVid
FROM cours,sessions,session_cours
INNER JOIN cours_document ON cours.id=cours_document.cours_id AND COUNT(cours_id)=0
WHERE cours.prof_id = :prof_id
AND sessions.prof_id = :prof_id
AND session_cours.cours_id=cours.id
AND sessions.id=session_cours.session_id
AND DATE_FORMAT(cours.date,"%Y-%m-%d") >= :date_min
AND DATE_FORMAT(cours.date,"%Y-%m-%d") <= :date_max
GROUP BY cours.id ORDER BY date ASC
但这个查询不起作用。SQL告诉我:
Column not found: 1054 Unknown column cours.id in on clause (500 Internal Server Error)
第一个问题,这个查询是否有效?(我指的是
ON [...] AND COUNT(cours_id)=0
)为什么会犯这个错误?我是说cours.id是定义的,select,cours在FROM子句中。。。我尝试使用alias(cid),MySQL对我的回答是一样的。。。
最佳答案
此查询无法工作。您正试图在count(…)=0的表中进行内部联接,因此没有要联接的记录!
正确的方法是:
SELECT cours.id AS cid, cours.name AS cname, DATE_FORMAT(cours.date,"%H:%i") AS cdate, DATE_FORMAT(cours.date,"%a") AS jour,sessions.id AS sid,sessions.name AS sname,sessions.restant,session_cours.session_id,session_cours.cours_id, ISNULL(cours.video_id) AS isVid
FROM cours,sessions,session_cours
WHERE cours.prof_id = :prof_id
AND sessions.prof_id = :prof_id
AND session_cours.cours_id=cours.id
AND sessions.id=session_cours.session_id
AND DATE_FORMAT(cours.date,"%Y-%m-%d") >= :date_min
AND DATE_FORMAT(cours.date,"%Y-%m-%d") <= :date_max
AND (SELECT COUNT(*) FROM cours_document WHERE cours.id=cours_document.cours_id) = 0
GROUP BY cours.id ORDER BY date ASC