錯誤意味着,這個子查詢:
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