错误意味着,这个子查询:
SELECT T.USER_ID
FROM USER_OTHER_PRIVILEGES T
JOIN USERS U
ON U.ID = T.USER_ID
WHERE T.UOPM_ID = 17
AND T.PRIV_ID IN (719)
返回多于一个行。
请运行此查询,您将看到至少会出现2个用户ID。
与价值条款的INSERT语句可以插入只一行到表中,并且它在VALUES子句中的每一列预计只有一个值:
INSERT INTO table(col1, col2, col3) VALUES (val1, val2, val3)
不能输入多值行中的一列。
例如,如果该子查询返回三个数字:1,2,3,你不能以这样的方式插入一行:
+------+---------+---------+---------+-------+-----------+
| ID | PRIV_ID | UOPM_ID | USER_ID | ML_ID | PARENT_ID |
+------+---------+---------+---------+-------+-----------+
| 456 | 1792 | 17 | 1,2,3 | NULL | 1 |
+------+---------+---------+---------+-------+-----------+
我猜你不想只插入一行,但你要插入一个单独的行由suquery返回的每个条目,就像这样:
+------+---------+---------+---------+-------+-----------+
| ID | PRIV_ID | UOPM_ID | USER_ID | ML_ID | PARENT_ID |
+------+---------+---------+---------+-------+-----------+
| 456 | 1792 | 17 | 1 | NULL | 1 |
+------+---------+---------+---------+-------+-----------+
| 457 | 1792 | 17 | 2 | NULL | 1 |
+------+---------+---------+---------+-------+-----------+
| 458 | 1792 | 17 | 3 | NULL | 1 |
+------+---------+---------+---------+-------+-----------+
在这种情况下,你不能使用INSERT INTO ... VALUES ...
语法,
需要INSERT INTO .... subquery
变种来代替,
看到这个answe r表示更多的细节:How can I insert values into a table, using a subquery with more than one result?
您的这种情况下,插入语句可以是:
INSERT INTO USER_OTHER_PRIVILEGES (
ID, PRIV_ID,UOPM_ID,USER_ID,ML_ID,PARENT_ID
)
SELECT
PRIV_USER_OTH_ID_SEQ.NEXTVAL,
1792,
17,
T.USER_ID,
NULL,
1
FROM USER_OTHER_PRIVILEGES T
JOIN USERS U
ON U.ID = T.USER_ID
WHERE T.UOPM_ID = 17
AND T.PRIV_ID IN (719)
什么是你的问题? –
如何添加“USER_OTHER_PRIVILEGES”表是67行? – Berkay
是否要将对应于第一个查询的67行与序列1792,17一起插入到user_other_privileges表中? – cableload