sql - 如何连接两个表 A 和 B 以获得 A 中的非连接列且数据不在 B 中?

标签 sql postgresql

我想对以下两个表进行联接,这将有助于识别所有具有缺失属性的客户。属性上的完全外部联接不起作用,因为空值不对应于任何客户。 一种选择是按客户分组以获得不同属性的计数并将其与属性计数进行比较。这会给有差异但希望错过基本属性的客户。这可能吗?

Table A (Customer to Attributes)
-----------
C1 | ATTR_1
C1 | ATTR_2
C1 | ATTR_3
C2 | ATTR_1
C2 | ATTR_2
C3 | ATTR_3

Table B (Attributes)
-------
ATTR_1
ATTR_2
ATTR_3

Output
------
C2 | ATTR_3
C3 | ATTR_1
C3 | ATTR_2

最佳答案

执行cross join 以获得所有组合。使用 except 删除现有的:

SELECT DISTINCT ta.Customer, tb.Attributes
FROM tableA ta CROSS JOIN tableB tb
EXCEPT
SELECT Customer, Attributes
FROM tableA

关于sql - 如何连接两个表 A 和 B 以获得 A 中的非连接列且数据不在 B 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57515232/

相关文章:

mysql - 如何在已包含外键的表中添加数据

MySQL INSERT ... SET ... ON DUPLICATE KEY 失败...困惑

postgresql - PostgreSQL 中的 bit_count 函数

postgresql - 删除触发器后访问任意元数据

MySQL,如果在重复键上

PHP 和 PostgreSQL 交易?

sql - sql server中有没有与ISNULL相反的函数? to do 是不是null?

postgresql - Postgres - 多列索引 - 前导(最左边)列

angularjs - 需要等待 heroku-connect SFID

java - hibernate 创建表时如何排列列?