如何使条件在MySQL中是可选的,这样如果我的条件出错,查询应该执行

时间:2015-01-31 09:49:11

标签: mysql

我必须使用名为" QUIZ"的MySQL表。和" CHAPTER"如下图所示

测验

qid | quizname | chapterid
=========================
1   | quiz1    |     0
-------------------------
2   | quiz3    |     1
-------------------------
3   | quiz3    |     2
-------------------------

章:

chapterid | chaptername  
=========================
1         | chpter1    
-------------------------
2         | chpter2    
-------------------------
3         | chpter3    
-------------------------

现在我想从QUIZ表中获取测验的详细信息,其中quizid = 1 。 我的SQL查询是

"SELECT quiz.qid, quiz.quizname, chapter.chaptername from quiz, chapter
 where quiz.chapterid=chapter.chapterid and quiz.qid=1"

但我没有结果。 那么请解释一下可能会出现什么问题?

2 个答案:

答案 0 :(得分:2)

您可以看到章节表中没有章节0,这就是查询不返回任何内容的原因(理所当然)。 如果你确实希望它从测验表中返回测验名,即使章节id无效,那么你应该使用左外连接。像这样:

SELECT quiz.qid, quiz.quizname, chapter.chaptername 
from quiz 
left outer join chapter On quiz.chapterid=chapter.chapterid 
Where quiz.qid=1

显然,返回的chaptername将为null。 (注意:我把上面的代码展示给你左外连接的想法。查看我可能忽略的任何特定于MySql的语法)。

答案 1 :(得分:0)

因为与qid = 1关联的chapterId为0,与另一个表中的任何其他行不匹配,因此您的查询将返回空记录 所以你最好将AND更改为OR并尝试运行

"SELECT quiz.qid, quiz.quizname, chapter.chaptername from quiz, chapter
 where quiz.chapterid=chapter.chapterid OR quiz.qid=1"

加入

select quiz.qid,quiz.quizname,chapter.chaptername from quiz left outer join chapter On quiz.chapterid = chapter.chapterid
相关问题