【问题标题】:Result not returned if 3rd table empty, why?如果第三个表为空,则不返回结果,为什么?
【发布时间】:2018-09-13 02:21:29
【问题描述】:

我想知道连接的工作方式,我有 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')

【问题讨论】:

  • 因为您使用的是所有内部连接。如果其中一个表是“可选的”(可能有也可能没有匹配的行),则需要使用外连接。
  • 我认为您正在寻找左连接。你一定要阅读this
  • 或者阅读this,很有帮助。
  • @Andrew 非常感谢,这真的很有帮助。非常好的教程。

标签: sql postgresql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-12-24
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    相关资源
    最近更新 更多