如何将 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_id
和 owner_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的输出)中,通常期望一行中的数据彼此相关。您的介绍可能会让习惯于此的人感到困惑。为什么不单独输出?
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_id
和 owner_id
组成。我想列出属于 owner_id
72 和 73 的 e_id。还有一个条件是
analysis_comp
标志在 table transaction_tab
.
我的尝试:
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的输出)中,通常期望一行中的数据彼此相关。您的介绍可能会让习惯于此的人感到困惑。为什么不单独输出?