如何将 ID 列表放入单独的列中

How to get list of ids into separate column

CREATE TABLE master_tab (
    e_id      NUMBER(10),
    owner_id  NUMBER(10),
    CONSTRAINT pk_master_tab PRIMARY KEY(e_id)
);

CREATE TABLE transaction_tab (
    e_id      NUMBER(10),
    analysis_comp  NUMBER(10),
    CONSTRAINT fk_master_tab FOREIGN KEY(e_id) REFERENCES master_tab(e_id)
);

INSERT INTO master_tab VALUES(1,72);
INSERT INTO master_tab VALUES(2,72);
INSERT INTO master_tab VALUES(3,73);
INSERT INTO master_tab VALUES(4,null);

INSERT INTO transaction_tab VALUES(1,1);
INSERT INTO transaction_tab VALUES(2,1);
INSERT INTO transaction_tab VALUES(3,1);
INSERT INTO transaction_tab VALUES(4,1);

问题陈述: 我有一个 table master_tab,它由两列 e_idowner_id 组成。我想列出属于 owner_id 72 和 73 的 e_id。还有一个条件是 analysis_comp 标志在 table transaction_tab.

中应为 1

我的尝试:

WITH a AS(
SELECT mt.e_id FROM master_tab mt
JOIN transaction_tab tt ON(tt.e_id = mt.e_id AND tt.analysis_comp = 1)
WHERE mt.owner_id = 72
),
b AS(
SELECT mt.e_id FROM master_tab mt
JOIN transaction_tab tt ON(tt.e_id = mt.e_id AND tt.analysis_comp = 1)
WHERE mt.owner_id = 73
)
SELECT a.e_id a_eid,b.e_id b_eid FROM a
FULL OUTER JOIN b ON(b.e_id = a.e_id);

使用的工具:SQL Developer(18c)

当前输出:

+-------+-------+
| A_EID | B_EID |
+-------+-------+
| 1     | null  |
| 2     | null  |
| null  | 3     |
+-------+-------+

预期输出:

+-------+-------+
| A_EID | B_EID |
+-------+-------+
|     1 |     3 |
|     2 |       |
+-------+-------+

owner_id 为 72 时是否可以仅获取 e_id 的列表然后在第一行中它应该给出 e_id 的所有列表 owner_id是 72,同样,如果 owner_id 是 73 那么它应该在另一列中提供单独的 e_id 列表? 如果我使用 JOIN 条件,它将仅限于 owner_id 72。是否有任何其他方法来处理我们需要来自不同列中的相同 table 的 ID 列表的情况

@Vicky,这个版本是根据您的查询修改的,可能更适合您table。

WITH a AS(
SELECT mt.e_id, rownum r FROM master_tab mt
JOIN transaction_tab tt ON(tt.e_id = mt.e_id AND tt.analysis_comp = 1)
WHERE mt.owner_id = 72
),
b AS(
SELECT mt.e_id, rownum r FROM master_tab mt
JOIN transaction_tab tt ON(tt.e_id = mt.e_id AND tt.analysis_comp = 1)
WHERE mt.owner_id = 73
)
SELECT a.e_id a_eid, b.e_id b_eid from a full outer join b
on a.r=b.r ;

此版本对每个子查询使用 ROWNUM,然后匹配 2 列 row-by-row。

为什么我们用了row_number/rownum?因为您要使用行号连接 2 列。

在SQL(或任何基于table的输出)中,通常期望一行中的数据彼此相关。您的介绍可能会让习惯于此的人感到困惑。为什么不单独输出?