如何在SQL中选择两个表之间的所有值?
Oracle数据库中有以下两个表(只读访问,因此只能使用select)如何在SQL中选择两个表之间的所有值?,sql,oracle,select,join,Sql,Oracle,Select,Join,Oracle数据库中有以下两个表(只读访问,因此只能使用select) 问题表格: N Question ID 1 1 2 2 3 3 Question ID Response day 1 01-04-15 3 02-04-15 4 03-04-15 响应表: N Question ID 1 1 2 2 3 3 Question ID Response day
问题
表格:
N Question ID
1 1
2 2
3 3
Question ID Response day
1 01-04-15
3 02-04-15
4 03-04-15
响应
表:
N Question ID
1 1
2 2
3 3
Question ID Response day
1 01-04-15
3 02-04-15
4 03-04-15
我希望输出结果为:
Question ID Response day
1 01-04-15
2 null
3 02-04-15
4 03-04-15
我正在尝试下面的查询,只有在有响应时才能获得问题ID。有人知道我哪里出错了吗
select questionID, responseday
from questions
join response
where question.question.ID = response.question.ID;
通过此查询,我得到以下结果:
Question ID Response day
1 01-04-15
3 02-04-15
4 03-04-15
一种方法是完全外部联接:
select coalesce(q.questionid, r.questionid) as questionid,
r.responseday
from questions q full outer join
responses r
on q.questionid = r.questionid;
使用左连接
select
q.questionid as questionid,
r.responseday
from
questions q
left join
responses r
on
q.questionid = r.questionid;
根据您的模式,一个简单的
左连接将足以满足您的模型
SELECT q.Question_ID,
r.Response_Day
FROM Question AS "q"
LEFT JOIN Response AS "r"
ON r.Question_ID = q.Question_ID;
JOIN
或internal JOIN
将仅返回两个表中所有属性匹配的结果集。由于响应表中不存在ID为2
的问题
记录,SQL将排除此数据
要解释空值
,您必须左连接
,请参见此处的SQLFIDLE:
另外,请看一下这个图形模型,它解释了所有的连接
:
事实上,我认为左连接就足够了。完全外部连接
可能是正确的答案,因为回答表中的问题id 4和问题表中的问题id 2。所需的输出包括两个表中的所有可用数据此查询与问题中的错误查询有什么区别?@Philippe。你可能想解释一下为什么你接受了这个答案,而这个答案与问题中不起作用的答案是一样的。这是一个左连接,我需要在这里做,它的工作。谢谢你的帮助