SQLite LEFT JOIN&WHERE子句混淆
发布时间:2020-12-12 18:59:39 所属栏目:百科 来源:网络整理
导读:我有两张桌子: 表1:问题: QuestionId NUMERICTitle TEXT 问题表中的测试数据: QuestionId Title1 What is your name?2 What is your age? 表2:答案: AnswerId NUMERICPersonId NUMERICQuestionId NUMERICAnswer TEXT 如果Answers表中没有数据,则下面的
我有两张桌子:
表1:问题: QuestionId NUMERIC Title TEXT 问题表中的测试数据: QuestionId Title 1 What is your name? 2 What is your age? 表2:答案: AnswerId NUMERIC PersonId NUMERIC QuestionId NUMERIC Answer TEXT 如果Answers表中没有数据,则下面的查询返回正确的结果(2行): SELECT q.QuestionId,q.Title,a.Answer FROM Questions q LEFT OUTER JOIN Answers a ON q.QuestionId = a.QuestionId WHERE a.PersonId = 2 OR a.PersonId IS null 但是,如果我在答案表中有例如1条记录,例如: AnswerId 1 PersonId 1 QuestionId 1 Answer 'My Name is Yaqub' 以下查询工作正常: SELECT q.QuestionId,a.Answer FROM Questions q LEFT OUTER JOIN Answers a ON q.QuestionId = a.QuestionId WHERE a.PersonId = 1 OR a.PersonId IS null 但是这个查询只返回一行: SELECT q.QuestionId,a.Answer FROM Questions q LEFT OUTER JOIN Answers a ON q.QuestionId = a.QuestionId WHERE a.PersonId = 2 OR a.PersonId IS null 上面的查询只返回一行是错误的,因为我在问题表中有两个问题&由于条件’或a.PersonId为空’,上述查询应返回它们. 为什么它没有返回两行? 期望的结果: 我想得到所有问题(2行)&那些PersonId有一些价值的答案,例如Person 2的两行,因为我在答案表中没有他的数据. 解决方法我找到了解决方案:SELECT q.QuestionId,a.Answer FROM Questions q LEFT OUTER JOIN Answers a ON q.QuestionId = a.QuestionId AND (a.PersonId = 2 OR a.PersonId IS null) 此查询将列出所有问题& WHERE子句将过滤掉PersonID具有特定值或为null的答案.因此,只要有问题的答案,我就不会获得PersonID的NULL值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |