这就是我正在尝试的,但出现此错误。
单行子查询返回多于一行。
我有这两个表:
表 2:
MY_NUM | 描述 | COL_2 | 阶段 |
---|---|---|---|
123 | 苹果 | 信息 | P1 |
124 | 橙色 | 信息 | P1 |
124 | 橙色 | INFO_2 | P1 |
125 | 香蕉 | 信息 | P2 |
125 | 香蕉 | INFO_2 | P2 |
表 3:
MY_NUM | COL_1 | 项目 | COL_3 |
---|---|---|---|
123 | 信息 | 1 | 信息 |
123 | INFO_2 | 1 | INFO_2 |
124 | 信息 | 2 | 信息 |
124 | INFO_2 | 2 | INFO_2 |
125 | 信息 | 1 | 信息 |
我尝试的第一件事是
INSERT INTO table1 (MY_NUM, DESCRIPTION, PROJECT, PHASE)
SELECT t2.MY_NUM,
t2.DESCRIPTION,
t3.PROJECT,
t2.PHASE,
FROM table2 t2
INNER JOIN table3 t3
ON t2.MY_NUM = t3.MY_NUM;
我收到了这个错误。
违反了唯一约束 (DASHBOARD.TABLE1_UK1)
MY_NUM 与 table2 和 table3 中的多个值相关联,因此我尝试为 MY_NUM 的表添加唯一值。
INSERT INTO table1 (MY_NUM, DESCRIPTION, PROJECT, PHASE)
SELECT (SELECT DISTINCT MY_NUM
FROM table2),
t2.DESCRIPTION,
t3.PROJECT,
t2.PHASE
FROM table2 t2
INNER JOIN table3 t3
ON t2.MY_NUM = t3.MY_NUM;
我收到了这个错误:
单行子查询返回多于一行
我想要这样的结果:
MY_NUM | 描述 | 项目 | 阶段 |
---|---|---|---|
123 | 苹果 | 1 | P1 |
124 | 橙色 | 2 | P1 |
125 | 香蕉 | 1 | P2 |
其中 MY_NUM 不会有重复值。 我已经看到其他人正在使用的 partition by 和 group by 子句,但我不确定如何将其实现到我正在做的事情中。
答案 0 :(得分:1)
使用修改后的数据,您只需添加 distinct
关键字:
INSERT INTO table1 (MY_NUM, DESCRIPTION, PROJECT, PHASE)
SELECT distinct
t2.MY_NUM,
t2.DESCRIPTION,
t3.PROJECT,
t2.PHASE
FROM table2 t2
INNER JOIN table3 t3
ON t2.MY_NUM = t3.MY_NUM;
你似乎有非规范化的数据;例如,phase
值出现在同一 my_num
的两行中。如果它们总是匹配,那么也许应该有一个不同的表,其中只记录一次。事实上,它们最终可能会得到不同的值,这要么是数据完整性问题;或者这个查询需要决定使用哪个值,否则它会返回到 a constraint violation。然后,您必须决定如何选择 - 基于某些其他列或最大值/最小值等。
答案 1 :(得分:0)
当您拥有 MY_NUM
的结果时,为什么要使用 JOIN
的子查询?这不是你想要的吗?
INSERT INTO table1 (MY_NUM, COL_1, COL_2, COL_3)
SELECT t2.MY_NUM, t2.COL_1, t3.COL_2, t2.COL_3
FROM table2 t2 INNER JOIN
table3 t3
ON t2.MY_NUM = t3.MY_NUM;