我有两个表t1和t2,它们都有两列。两个表都包含客户及其交易数据。因此,我需要t1中存在但t2中不存在的所有客户和交易代码。但我只需要那些在t2中至少有一个交易可用的客户的这些输出。
t1:-
| 客户代码1|代码转换_1|
| - ------|- ------|
| 1个|项目a|
| 1个|B|
| 1个|(c)秘书长的报告|
| 1个|日|
| 1个|电子|
| 第二章|项目a|
| 第二章|B|
| 第二章|(c)秘书长的报告|
| 三个|我|
| 三个|j|
| 三个|k|
| 三个|升|
| 。|。|
| 。|。|
| 。|。|
| 。|。|
t2:-
| 客户代码2|代码转换_2|
| - ------|- ------|
| 1个|项目a|
| 1个|B|
| 1个|(c)秘书长的报告|
| 第二章|B|
t1 sql脚本:
CREATE TABLE t1
(
cust_code_1 VARCHAR(512),
trans_code_1 VARCHAR(512)
);
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('1', 'a');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('1', 'b');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('1', 'c');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('1', 'd');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('1', 'e');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('2', 'a');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('2', 'b');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('2', 'c');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('3', 'i');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('3', 'j');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('3', 'k');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('3', 'l');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('.', '.');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('.', '.');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('.', '.');
INSERT INTO t1 (cust_code_1, trans_code_1) VALUES ('.', '.');
t2 sql脚本:
CREATE TABLE t2
(
cust_code_2 VARCHAR(512),
trans_code_2 VARCHAR(512)
);
INSERT INTO t2 (cust_code_2, trans_code_2) VALUES ('1', 'a');
INSERT INTO t2 (cust_code_2, trans_code_2) VALUES ('1', 'b');
INSERT INTO t2 (cust_code_2, trans_code_2) VALUES ('1', 'c');
INSERT INTO t2 (cust_code_2, trans_code_2) VALUES ('2', 'b');
预期产出
| 客户代码1|代码转换_1|客户代码2|代码转换_2|
| - ------|- ------|- ------|- ------|
| 1个|日|零|零|
| 1个|电子|零|零|
| 第二章|项目a|零|零|
| 第二章|(c)秘书长的报告|零|零|
正在获取的输出
| 客户代码1|代码转换_1|客户代码2|代码转换_2|
| - ------|- ------|- ------|- ------|
| 1个|日|零|零|
| 1个|电子|零|零|
| 第二章|项目a|零|零|
| 第二章|(c)秘书长的报告|零|零|
| 三个|我|零|零|
| 三个|j|零|零|
| 三个|k|零|零|
| 三个|升|零|零|
| 。|。|。|。|
| 。|。|。|。|
| 。|。|。|。|
所尝试的操作已离开联接的t1和t2查询-
select * from t1 left join t2 on t1.cust_code_1=t2.cust_code_2
and t1.trans_code_1=t2.trans_code_2
where t2.cust_code_2 is null
我的实际问题这里,我不希望输出cust_code_1=3。基本上,我希望输出左连接,但cust_code_2应该可用。因为我有数百万条记录,但我只需要那些在t2中不可用的Cust code=1和Cust code=2的事务。
仅供参考-我的数据库支持PostgreSQL。
请帮助我获得以下输出。
1条答案
按热度按时间fkaflof61#
您可以只通过在where子句中附加以下条件来过滤掉不需要的记录:
因此,您的结果将仅包含在cust_code_2列中具有值的记录。
下面是完整的sql:
您可以在这个SQL Fiddle中尝试一下。