Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不确定SQL右连接_Sql - Fatal编程技术网

不确定SQL右连接

不确定SQL右连接,sql,Sql,请参见下面的SQL DDL: create table tablea (id int identity, name varchar(30)) create table tableb (id int identity, wid int, rid int) create table tablec (id int) insert into tablea(name) values ('ian') insert into tableb(wid,rid)values (1,1) insert into t

请参见下面的SQL DDL:

create table tablea (id int identity, name varchar(30))
create table tableb (id int identity, wid int, rid int)
create table tablec (id int)

insert into tablea(name) values ('ian')
insert into tableb(wid,rid)values (1,1)
insert into tablec values(1)
insert into tablec values(2)
insert into tablec values(3)
以及下面的SQL语句:

select tablea.* from tablea
left join tableb on tablea.id=tableb.wid
right join tablec on tablea.id=tablec.id
我不知道这会带来什么。结果是:

2
3
最初我期望有三个结果。为什么会有两个结果?我意识到这是一个基本问题,但我以前从未使用过这样的SQL语句

我期望有三行的原因是因为以下查询返回一行:

select tablea.* from tablea
left join tableb on tablea.id=tableb.wid
下面的查询返回两行:

select tablea.* from tablea
right join tablec on tablea.id=tablec.id

2+1=3

我不完全确定你想做什么,但也许你在表格B中的选择有错?如果将其更改为从表C中选择:

select tablec.* from tablea
left join tableb on tablea.id=tableb.wid
right join tablec on tablea.id=tablec.id

这将返回表C中的每一行,正如您最初所说的那样。

如果选择表B.*,其中只有(1,1),结果怎么会是“2 3”?如果没有右连接,则可以将它们重写为左连接,这样更易于阅读和编辑understand@user1281385-对于多表联接,有时正确的联接版本可能更简单。要使用
左连接
,您需要在子句上连续使用两个
,或者引入派生表或CTE。再次检查结果,它们仍然不匹配。我已经编辑了这个问题。你能再看一眼吗?谢谢