如果第3个表为空,结果不返回,为什么?

时间:2018-09-12 18:15:48

标签: sql postgresql

我想知道联接的工作方式,我有3个表的用户,地址和位置,用户和地址表有数据,但没有位置。当我使用来自用户的地址进行联接时,它返回数据,但是当我与位置联接时,它不返回数据,我的问题是为什么它为零,因为我将用户联接到地址并将用户联接到位置,所以如果用户有数据地址表,则它将返回该数据但不在位置中,因此不要在位置列中返回位置数据。我的架构是

 create temporary table users (
   id serial,
   username VARCHAR(25) NOT NULL,
   PRIMARY KEY (id)
 );

 CREATE temporary TABLE addresses (
   id serial,
   user_id int NOT NULL,
   city VARCHAR(30) NOT NULL,
   PRIMARY KEY (id),
   CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id)
 );

 CREATE temporary TABLE location (
   id serial,
   user_id int NOT NULL,
   state VARCHAR(30) NOT NULL,
   PRIMARY KEY (id),
   CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users (id)
 );

 insert into users(username) values ('u1'), ('u2'), ('u3'), ('u4')
 insert into addresses(user_id, city) values (1, 'c1'), (2,'c2'), (3,'c3')


 select * 
 from users u 
    inner join addresses a on u.id=a.user_id 
    inner join location l on u.id=l.user_id;

 insert into location(user_id, state) values (3, 's2')

1 个答案:

答案 0 :(得分:0)

inner join要求两个表都匹配。 Outer joins允许您处理不正确的情况。您的查询仅显示内部联接。