MYSQL 查询以下结果[重复]

问题描述 投票:0回答:1

表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'))
;
mysql
1个回答
0
投票

您需要在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

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.