表A中的每笔交易都有关联交易。 关联交易情况见表B。 表C有相应的类型名称。 需要拉取类型 Payment_GP 不存在的所有交易。
例如ID为1的交易有Rel_ID D,即Payment_GP。因此 1 的任何相关交易都不应被退回。
表A
ID
1
2
A
B
C
D
E
F
表B
ID Rel_ID
1 A
1 B
1 C
1 D
2 E
2 F
表C
ID Type
A Payment_Adv
B Payment_Clr
c Payment_A
D Payment_GP
E Payment_Adv
F Payment_Clr
预期输出:
ID Rel_ID Type
2 G Payment_Adv
2 H Payment_Clr
我的查询没有按预期返回输出。
SELECT A.id,
B.Rel_ID,
C.Type
FROM Table_A A
INNER JOIN Table_B B ON A.ID = B.ID
INNER JOIN Table_C C ON B.Rel_ID = C.ID
WHERE NOT EXISTS
(SELECT 1
FROM Table_C C1
WHERE C1.ID = C.ID
AND C1.Type IN ('Payment_GP'))
;
您需要在Table_B删除不需要的id
CREATE TABLE Table_A (
`ID` varchar(1)
);
INSERT INTO Table_A
(`ID`)
VALUES
('1'),
('2'),
('A'),
('B'),
('C'),
('D'),
('E'),
('F');
Records: 8 Duplicates: 0 Warnings: 0
CREATE TABLE Table_B (
`ID` INTEGER,
`Rel_ID` VARCHAR(1)
);
INSERT INTO Table_B
(`ID`, `Rel_ID`)
VALUES
('1', 'A'),
('1', 'B'),
('1', 'C'),
('1', 'D'),
('2', 'E'),
('2', 'F');
Records: 6 Duplicates: 0 Warnings: 0
CREATE TABLE Table_C (
`ID` VARCHAR(1),
`Type` VARCHAR(11)
);
INSERT INTO Table_C
(`ID`, `Type`)
VALUES
('A', 'Payment_Adv'),
('B', 'Payment_Clr'),
('c', 'Payment_A'),
('D', 'Payment_GP'),
('E', 'Payment_Adv'),
('F', 'Payment_Clr');
Records: 6 Duplicates: 0 Warnings: 0
SELECT A.id,
B.Rel_ID,
C.Type
FROM Table_A A
INNER JOIN Table_B B ON A.ID = B.ID
INNER JOIN Table_C C ON B.Rel_ID = C.ID
WHERE NOT EXISTS (SELECT 1
FROM Table_B B1
INNER JOIN Table_C C1 ON B1.Rel_ID = C1.ID
WHERE B1.ID = A.id
AND C1.`Type` IN ('Payment_GP'))
id | Rel_ID | 类型 |
---|---|---|
2 | F | 付款_Clr |
2 | E | 付款_Adv |