[英]MySQL syntax error regarding WHERE NOT EXISTS
我有一個廚師食譜,用於創建Unix用戶ID並將其部署在多個節點上,以確保唯一性並防止開發人員自己跟蹤它們。 他們只是為應用程序命名,如果該應用程序的ID不存在,則會為其授予唯一的ID。 如果是這樣,它將簡單地返回到腳本,並在Web服務器上使用適當的值創建用戶帳戶。
我有一個帶有單個表的mysql數據庫,稱為application_id_table,其中有兩列,即id和application_name。 id為自動遞增,並且應用程序名稱不能為null(並且必須是唯一的)。
從腳本中刪除Ruby並進行幾次替換,我的sql如下所示:
在不存在的地方插入application_id_table(application_name)VALUES('andy_test')(在application_name ='andy_test'的情況下從application_id_table中選擇1);
運行時,我收到語法分析錯誤:
錯誤1064(42000):您的SQL語法有錯誤; 檢查與您的MySQL服務器版本相對應的手冊,以在“不存在”附近使用正確的語法(從application_id_table中選擇1,其中application_name ='a'
我記得曾經看到過values語句不允許where子句,但是我不希望使用select語句來填充值,因為我是從Ruby / Chef中提供的變量中填充它們的。 任何人都有一個想法如何做到這一點?
您要使用insert . . . select
insert . . . select
insert . . . select
:
INSERT INTO application_id_table(application_name)
SELECT aname
FROM (SELECT 'andy_test' as aname) t
WHERE NOT EXISTS (select 1 from application_id_table ait WHERE ait.application_name = t.aname);
您應該能夠將變量直接插入到select
語句中, VALUES
使用VALUES
語句一樣。
嘗試這個:
INSERT INTO application_id_table(application_name)
select 'andy_test'
WHERE NOT EXISTS (select 1 from application_id_table WHERE application_name = 'andy_test');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.