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

标签 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')

最佳答案

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

关于sql - 如果第 3 个表为空,则不返回结果,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52301234/

相关文章:

mysql - 在 mysql 中使用多个 AND 运算符过滤数据

php - 在 sql 中使用 MIN 时得到错误的查询

java - 在java中使用SHA1对密码进行哈希处理

sql - “CREATE PROCEDURE”必须是批处理中的唯一语句(错误)

python - 不存在身份验证 API 时,如何将用户凭据安全地存储到第三方网站?

postgresql - View 和带有继承的分区之间的区别

postgresql - 结合多个索引的 Postgres

sql - 甲骨文解码与 NVL

postgresql - 使用 pg_bulkload 将新行加载到 PostgreSQL 时如何指定列

postgresql - 按不使用索引的查询分组