Oracle有A和B两张表B是A的子集不在B表的数据都显示B表里有数据时符合B表的一些条件才显示否则不显示。请提供示例改进上面的示例要求例子通用A和B表都有多个字段。改进上面的示例如果B表里的b1和A表里的a1相等时只有B表里的b3等于某个值时显示这条记录如果a1在B表里没有对应值也显示出来。改进上面的示例左连接放在where条件里书写请提供示例
示例1:
假设A表和B表都有两个字段,A表的字段为a1和a2,B表的字段为b1和b2。
CREATE TABLE A ( a1 INT, a2 VARCHAR(50) );
CREATE TABLE B ( b1 INT, b2 VARCHAR(50) );
INSERT INTO A VALUES (1, 'A1'); INSERT INTO A VALUES (2, 'A2'); INSERT INTO A VALUES (3, 'A3'); INSERT INTO A VALUES (4, 'A4');
INSERT INTO B VALUES (2, 'B2'); INSERT INTO B VALUES (4, 'B4');
SELECT A.a1, A.a2 FROM A LEFT JOIN B ON A.a1 = B.b1 WHERE B.b1 IS NULL;
结果:
a1 | a2
1 | A1 3 | A3
示例2:
假设A表和B表都有三个字段,A表的字段为a1、a2和a3,B表的字段为b1、b2和b3。
CREATE TABLE A ( a1 INT, a2 VARCHAR(50), a3 INT );
CREATE TABLE B ( b1 INT, b2 VARCHAR(50), b3 INT );
INSERT INTO A VALUES (1, 'A1', 10); INSERT INTO A VALUES (2, 'A2', 20); INSERT INTO A VALUES (3, 'A3', 30); INSERT INTO A VALUES (4, 'A4', 40);
INSERT INTO B VALUES (2, 'B2', 20); INSERT INTO B VALUES (4, 'B4', 30);
SELECT A.a1, A.a2, A.a3 FROM A LEFT JOIN B ON A.a1 = B.b1 AND B.b3 = 30 WHERE B.b1 IS NULL OR (B.b1 IS NOT NULL AND A.a1 = B.b1 AND B.b3 = 30);
结果:
a1 | a2 | a3
1 | A1 | 10 2 | A2 | 20 3 | A3 | 30 4 | A4 | 40
示例3:
假设A表和B表都有两个字段,A表的字段为a1和a2,B表的字段为b1和b2。
CREATE TABLE A ( a1 INT, a2 VARCHAR(50) );
CREATE TABLE B ( b1 INT, b2 VARCHAR(50) );
INSERT INTO A VALUES (1, 'A1'); INSERT INTO A VALUES (2, 'A2'); INSERT INTO A VALUES (3, 'A3'); INSERT INTO A VALUES (4, 'A4');
INSERT INTO B VALUES (2, 'B2'); INSERT INTO B VALUES (4, 'B4');
SELECT A.a1, A.a2 FROM A LEFT JOIN B ON A.a1 = B.b1 AND B.b2 = 'B4' WHERE B.b1 IS NULL OR (B.b1 IS NOT NULL AND A.a1 = B.b1 AND B.b2 = 'B4');
结果:
a1 | a2
1 | A1 2 | A2 3 | A3 4 | A
原文地址: https://www.cveoy.top/t/topic/ixTt 著作权归作者所有。请勿转载和采集!