簡體   English   中英

關於WHERE NOT EXISTS的MySQL語法錯誤

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

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