我是MySQL的新手。我有兩個相關的表格,很常見的情況:Klients(KID,姓名,姓氏)和Visits(VID,VKID,dateOfVisit) - VKID是Klient ID。我有一個合適的INSERT查詢的問題,這是我想要做的: 1.檢查是否存在具有特定名稱和姓氏的Klient(讓我們假設沒有人具有相同的姓氏) 2.如果是,得到ID並執行INSERT訪問表 3.如果否,則插入新的Klient,將ID和INSERT訪問到訪問。複雜INSERT查詢
是否可以在一個查詢中執行?
我是MySQL的新手。我有兩個相關的表格,很常見的情況:Klients(KID,姓名,姓氏)和Visits(VID,VKID,dateOfVisit) - VKID是Klient ID。我有一個合適的INSERT查詢的問題,這是我想要做的: 1.檢查是否存在具有特定名稱和姓氏的Klient(讓我們假設沒有人具有相同的姓氏) 2.如果是,得到ID並執行INSERT訪問表 3.如果否,則插入新的Klient,將ID和INSERT訪問到訪問。複雜INSERT查詢
是否可以在一個查詢中執行?
您需要使用IF EXIST/NOT EXISTS並使用子查詢來檢查表。見bwlo
http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html
HTH
這不給予解決 – Skrol29 2012-03-17 20:40:02
INSERT語句只允許一個單一的目標表中的參考。
因此,除非使用觸發器或存儲過程,否則查找的查詢是不可能的。
但是,這種問題是使用休耕小算法通常解決:
1)插入在表中的記錄[訪問]假定父記錄並在表中存在[Klients]
INSERT INTO Visits (VKID, dateOfVisit)
SELECT KID, NOW()
FROM Klients
WHERE ([email protected]) AND ([email protected])
2)查詢後查詢插入的記錄數(1)
3)如果沒有記錄被插入,則添加一個新的記錄表[Klients],然後再次運行(1)。
嘗試這樣的事情
IF (SELECT * FROM `sometable` WHERE name = 'somename' AND surname = 'somesurname') IS NULL THEN
INSERT INTO Table1(name,surname) VALUES ('somename', 'somesurname');
ELSE INSERT INTO visits(kid,name,surname)
SELECT kid, name, surname FROM Table1 WHERE name = 'somename' AND surname = 'somesurname';
END IF;
沒有需要指定
我沒有測試過二次插入「價值」,但這是你正在嘗試的總體思路完成。
它看起來像它適合我的需要,由我收到1064錯誤[上一頁] [代碼] IF NOT EXISTS(SELECT * FROM'Klients' WHERE'surname' ='史密斯)THEN INSERT INTO'Klients'('name','surname')VALUES( '亞當', '史密斯'); ELSE INSERT INTO'Visits'('VKID') SELECT'KID' FROM'Klients' WHERE'surname' = '史密斯'; END IF; [/代碼] [/預] – user1091733 2012-03-17 22:14:59
對不起,但我無法弄清楚如何在我的註釋格式的代碼,這是一個有點亂 – user1091733 2012-03-17 22:22:13
這些應該是事務的兩個查詢:
INSERT INTO Klients (name, surname)
VALUES ('John', 'Doe')
ON DUPLICATE KEY UPDATE
KID = LAST_INSERT_ID(KID);
INSERT INTO Visits (VKID, dateOfVisits)
VALUES (LAST_INSERT_ID(), NOW());
第一條語句是在更新部分使用並不廣爲人知的UPSERT聲明,但對於LAST_INSERT_ID的目的,功能完全相同intented(),其中明確通過的值被存儲用於獲取之後的值。
UPD:我忘記提及您需要添加一個唯一的約束(姓,名)。
聽起來不像一個查詢。 – Randy 2012-03-17 20:30:34
也許交易? – user1091733 2012-03-17 20:32:08
有一個相關的問題,也許這可能有幫助 http://stackoverflow.com/questions/4940283/conditional-mysql-statement-if-true-update-if-false-insert – gastonfartek 2012-03-17 20:47:37