sql - postgresql - 加入匹配的表以及不匹配的表?

标签 sql postgresql select join

所以我有一个连接,它可以工作,但它没有显示我想要的所有数据。目前我想查看 device_interface.c1 中的每一行,如果 device_interface.c1 = device_inventory.c1 那么我也想在列中查看它。现在我只看到了 device_interface.c1 = device_inventory.c1

下面是我的查询:

SELECT 
  device_info.pk,
  device_interface.fk, 
  device_interface.c1, 
  device_interface.c2, 
  device_inventory.c1
FROM 
  "test".device_info, 
  "test".device_interface, 
  "test".device_inventory
WHERE 
  device_info.pk = device_interface.fk AND
  device_info.pk = device_inventory.fk AND
  device_interface.c1 = device_inventory.c1 AND
  device_interface.c2 = 'Physical'

示例输出:

device_info.pk  device_interface.c1   device_inventory.c1
1                        1                     1
1                        3                     3
1                        95                    95
2                        55                    55
2                        634                   634

所需输出示例:

device_info.pk  device_interface.c1   device_inventory.c1
1                        1                     1
1                        2          
1                        3                     3
1                        4
1                        5
1                        6
1                        95                    95
2                        55                    55
2                        56 
2                        57
2                        634                   634

最佳答案

left join 应该可以解决问题:

SELECT 
  device_info.pk,
  device_interface.fk, 
  device_interface.c1, 
  device_interface.c2, 
  device_inventory.c1
FROM 
  "test".device_info
LEFT JOIN
  "test".device_interface 
ON 
  device_info.pk = device_interface.fk
LEFT JOIN
  "test".device_inventory 
ON 
  device_info.pk = device_inventory.fk AND
  device_interface.c1 = device_inventory.c1
WHERE 
  device_interface.c2 = 'Physical'

关于sql - postgresql - 加入匹配的表以及不匹配的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41193897/

相关文章:

postgresql - Insert into select 嵌套select(s) 表现。庞大的工会选择

java - 如何在jdbctemplate中使用groupBy进行查询

angular - 显示数据库获取的值(如果存在)否则在 ng-select angular 中显示默认文本

mysql - 从列中选择最大值,除非其他列中有特定值

sql - 转换 ROW_NUMBER 列会影响性能

sql - 服务器 'MSERVER1-PC\SQLEXPRESS' 上的 MSDTC 不可用

sql - 如何确定 TimescaleDB 表的大小?

PostgreSQL 可变表达式和子查询

javascript - 没有 jQuery 或 Ajax 的链式选择

javascript - 使用 div 而不是 select