[英]Sql syntax error when bulk inserting with mysql node.js
我正在使用mysql
節點模塊。
我的查詢是:
insert into myTableA (fk_1, fk_2)
values (
(select id from myTableB where name = ?),
(select id from myTableC where name = ?)
)
我的方法調用如下所示:
db.query(q, [values], (err) => { ... })
values
中的每個項目都是一個數組,其項目分別是myTableB
和myTableC
的名稱。 如上所示,我確保將values
包裝在另一個數組中。
我得到的錯誤是:
ER_PARSE_ERROR:您的SQL語法有錯誤。 檢查與您的MySQL服務器版本相對應的手冊以獲取在...附近使用的正確語法。
請幫助...
編輯1:
我嘗試插入的值如下所示:
var values = [
[name00, name01],
[name10, name11],
[name20, name21],
...
]
編輯2:
這里是為了澄清我的困惑...基本上,我正在尋找一種方法,允許我使用INSERT INTO
查詢來組合以下兩個查詢:
INSERT INTO MyTable (col_1, col_2, col_3) VALUES ?
和:
INSERT INTO MyTableA (col_1, col_2, col_3) VALUES (
(select id from MyTableB where name=?),
(select id from MyTableC where name=?),
?
)
我正在尋找的查詢將讓我以以下形式傳遞values
變量:
var values = [
[row_0_col_1, row_0_col_2, row_0_col_3],
[row_1_col_1, row_1_col_2, row_1_col_3],
[row_2_col_1, row_2_col_2, row_2_col_3],
...
]
嘗試使用SQL Join
功能,以從多個表中插入選定的值。
供您參考的示例:
INSERT INTO Table (aID, bID)
SELECT a.ID, B.ID
FROM A, B
WHERE A.Name='Me'
AND B.Class='Math';
myTableA
似乎是一個多對多表,並且您試圖將行填充為對myTableB
和myTableC
外鍵引用。
使用INSERT ... VALUES
語法,可以指定數據值的行,但必須指定每一行。 像這樣:
INSERT INTO myTableA (fk_1, fk_2) VALUES
('name00', 'name01');
('name10', 'name11');
('name20', 'name21');
每行都是獨立且獨立的。 如果使用子查詢,則每個子查詢都必須返回一個值(這稱為標量子查詢 )。 您不能使用返回多個值的子查詢。
您還可以使用INSERT ... SELECT
語法,因此INSERT ... SELECT
不必使用列出的行,而是僅使用SELECT語句返回的行。
INSERT INTO myTableA (fk_1, fk_2)
SELECT b.id, c.id
FROM myTableB JOIN myTableC ON (...);
但是您將必須提供一些聯接表達式來描述如何匹配聯接中兩個相應表中的值。
這將需要憑空發明多對多關系。
至於node返回的語法錯誤,您在上面的帖子中包含的錯誤將在您鍵入...
地方被截斷。 這不是完整的錯誤消息。 您發布的查詢顯然已被編輯(我想您的表名不是myTableA
, myTableB
等)。 您正在尋求幫助,但是您既未提供執行的實際查詢,也未提供實際的錯誤消息。 鑒於此,Stack Overflow上的任何人都無法猜測錯誤的原因或針對此錯誤的任何修復方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.