![](/img/trans.png)
[英]MYSQL inserting records form table A into tables B and C (linked by foreign key) depending on column values in table A
[英]inserting records in a MySQL table depending on existing values in another table
我正在使用MySQL。 我想在表中插入一些記錄,前提是它們在另一個表中不存在。 所以我想執行這樣的事情:
INSERT INTO sales (name, id)
SELECT name, id FROM sales_h
WHERE name AND id NOT IN (SELECT name, id FROM T_sales);
問題是MySQL不允許這種語法(與where子句有關……),我嘗試使用CONCAT卻沒有結果。
有任何線索嗎?
INSERT
INTO sales (name, id)
SELECT name, id
FROM sales_h
WHERE (name, id) NOT IN
(
SELECT name, id
FROM t_sales
)
您是否嘗試過EXISTS 語法 ?
INSERT INTO sales (name, id)
SELECT name, id
FROM sales_h
WHERE NOT EXISTS (SELECT * FROM T_sales WHERE T_sales.name = sales_h.name AND T_sales.id = sales_h.id);
MySQL允許您使用類似變量的元組:
這是您的聲明:
INSERT INTO sales (name, id)
SELECT name, id FROM sales_h
WHERE name AND id NOT IN (SELECT name, id FROM T_sales);
問題是“名稱和ID”。 把它變成一個元組:
INSERT INTO sales (name, id)
SELECT name, id FROM sales_h
WHERE (name, id) NOT IN (SELECT name, id FROM T_sales);
就我個人而言,我不太喜歡這樣做有兩個原因:作為變量的元組在其他RDBMS上不起作用(或工作方式不同),並且IN在許多情況下的表現往往很差,所以我想養成一種習慣用於。
如jhonny-d-cano-leftware所述(我對他進行了高調處理),我將使用不存在的位置:
INSERT INTO sales (name, id)
SELECT name, id FROM sales_h a
WHERE not exists (
SELECT *
FROM T_sales b
where b.id = a.id and b.name = a.name);
INSERT INTO table_name(column1, column2) SELECT "value one", "value two" FROM DUAL
WHERE NOT EXISTS(
SELECT column1 FROM table_name
WHERE column1 = "value one"
AND column2 = "value two" LIMIT 1
)
您可能會研究MySql的ON DUPLICATE
子句
http://dev.mysql.com/doc/refman/5.1/zh-CN/insert-select.html
您不能說“ WHERE name AND ID NOT IN ...”,而每個都需要一個單獨的子句。 但是,您是否將id作為表T_sales中的主鍵? 如果是這樣,那么這就是您需要檢查的所有內容,例如:
INSERT INTO sales (name, id)
(SELECT name, id FROM sales_h WHERE id NOT IN (SELECT id FROM T_sales));
編輯
從其他人的答案中得知,最好不要理我,因為他們似乎了解更多:-)
問題出在您的位置。
它不是按原樣閱讀的。 您將其讀取為“ WHERE(名稱和ID)NOT IN(...)”,而將其讀取為“ WHERE名稱(不為null)AND(ID NOT IN(...))”。如果你明白我的意思。
更改為: ROW(name, id) NOT IN (SELECT name, id FROM T_sales);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.