簡體   English   中英

如果MYSQL中不存在兩個值(同一表),則插入記錄

[英]Insert record if two values do not exist in MYSQL (same table)

我試圖僅在沒有包含兩個值的現有記錄時才將記錄插入表中。 該查詢引發錯誤:“在'WHERE NOT EXISTS附近使用語法”

我已經嘗試了SO帖子中的各種示例,但似乎無法解決這個問題。

INSERT INTO tasks_admin2agent 
(trans_id,category,task_name,task_detail,date_due_d) 
VALUES 
('2186597-L1','Listing','Incomplete Listing Record', 'Please complete the 
listing record','2018-03-31') 
WHERE NOT EXISTS 
   (SELECT 
    trans_id,task_name 
    FROM tasks_admin2agent 
    WHERE trans_id = '2186597-L1' 
    AND task_name = 'Incomplete Listing Record'
    )

對我來說,如果將“ VALUES”更改為“ SELECT”,則可以使用。 但我無法解釋為什么這行得通

INSERT INTO tasks_admin2agent 
(trans_id,category,task_name,task_detail,date_due_d) 
SELECT 
('2186597-L1','Listing','Incomplete Listing Record', 'Please complete the 
listing record','2018-03-31') FROM tasks_admin2agent
WHERE NOT EXISTS 
   (SELECT 
    trans_id,task_name 
    FROM tasks_admin2agent 
    WHERE trans_id = '2186597-L1' 
    AND task_name = 'Incomplete Listing Record'
    )

嘗試這個:

INSERT INTO tasks_admin2agent 
(trans_id,category,task_name,task_detail,date_due_d) 
SELECT 
'2186597-L1','Listing','Incomplete Listing Record', 'Please complete the 
listing record','2018-03-31' from tasks_admin2agent
WHERE NOT EXISTS 
(SELECT 
 *
FROM tasks_admin2agent 
WHERE trans_id = '2186597-L1' 
AND task_name = 'Incomplete Listing Record'
);

您還可以查看:在不存在的情況下插入值

嘗試類似

INSERT INTO tasks_admin2agent 
(trans_id,category,task_name,task_detail,date_due_d) 
SELECT 
'2186597-L1','Listing','Incomplete Listing Record', 'Please complete the 
listing record','2018-03-31' FROM tasks_admin2agent
WHERE NOT EXISTS 
   (SELECT 
    *
    FROM tasks_admin2agent 
    WHERE trans_id = '2186597-L1' 
    AND task_name = 'Incomplete Listing Record'
    );

您可以嘗試演示

只需在有問題的兩列上設置(Composite-)Key-Constraint(唯一):

ALTER TABLE tbl ADD UNIQUE KEY `uniqueConstraint` (col1, col2);

使用常規插入和“句柄”“重復鍵錯誤”->這意味着值對已經存在。

這也將允許您將查詢與ON DUPLICATE KEY UPDATE -Syntax結合使用。 (如果需要的話)

請注意,中止的插入或On duplicate key update無論如何都會消耗下一個自動增量ID。

可以使用FROM DUAL在此示例中使其正常工作。

謝謝大家的協助!

如何在MySQL中“插入不存在”?

INSERT INTO `table` (value1, value2) 
SELECT 'stuff for value1', 'stuff for value2' FROM DUAL
WHERE NOT EXISTS (SELECT * FROM `table` 
      WHERE value1='stuff for value1' AND value2='stuff for value2') 
LIMIT 1 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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