如何在表中插入一個數字,僅當表中尚未包含該數字時才使用?只有在表中不存在某個值時才插入SQL?
我正在尋找特定的SQL代碼,不確定如何處理這個問題。嘗試了幾件事,沒有任何工作。
編輯
表看起來是這樣的:
PK ID Value
1 4 500
2 9 3
所以,如果我想INSERT (ID, Value) VALUES (4,100)
它不應該試圖做到這一點!
如何在表中插入一個數字,僅當表中尚未包含該數字時才使用?只有在表中不存在某個值時才插入SQL?
我正在尋找特定的SQL代碼,不確定如何處理這個問題。嘗試了幾件事,沒有任何工作。
編輯
表看起來是這樣的:
PK ID Value
1 4 500
2 9 3
所以,如果我想INSERT (ID, Value) VALUES (4,100)
它不應該試圖做到這一點!
嘗試MERGE語句:
MERGE INTO tbl USING
(SELECT 4 id, 100 value FROM dual) data
ON (data.id = tbl.id)
WHEN NOT MATCHED THEN
INSERT (id, value) VALUES (data.id, data.value)
INSERT INTO YOUR_TABLE (YOUR_FIELD)
SELECT '1' FROM YOUR_TABLE YT WHERE YT.YOUR_FIELD <> '1' LIMIT 1
當然,這 '1' 將是你的電話號碼或您的變量。 您可以使用INSERT + SELECT解決此問題。
如果ID
應該是唯一的,那麼應該在表上定義唯一的約束。如果您嘗試插入已經存在
ALTER TABLE table_name
ADD CONSTRAINT uk_id UNIQUE(id);
您可以捕獲錯誤並做了什麼價值,如果試圖插入重複你想從忽略key--任何會引發錯誤錯誤日誌和重新提高例外養自定義異常
BEGIN
INSERT INTO table_name(id, value)
VALUES(4, 100);
EXCEPTION
WHEN dup_val_on_index
THEN
<<do something>>
END;
您也可以編寫代碼INSERT
以便讓它能夠插入0行(你還是想無論是從數據模型的角度來看到位的唯一約束和因爲它爲優化程序提供了更多信息並可能使未來的查詢效率更高)
INSERT INTO table_name(id, value)
SELECT 4, 100
FROM dual
WHERE NOT EXISTS(
SELECT 1
FROM table_name
WHERE id = 4)
或者您也可以編碼MERGE
,以便將VALUE
列從500更新爲100,而不是插入新行。
不能告訴你,除非你展示什麼樣的表看起來像 – Hogan
基本上是一個改編的版本的http://stackoverflow.com/questions/8156931/why-is-my-sql-failing-ora-00933-sql-命令未正確結束 –