簡體   English   中英

根據另一個表中的現有值在MySQL表中插入記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM