[英]Mysql query insert into only if select count > n
我有兩個疑問:
SELECT COUNT(*) FROM a WHERE id = 1
//if row == 1
INSERT INTO a VALUES(fielda) VALUES('value')
有沒有辦法將這兩個查詢合並為一個? 我嘗試了 'IF (count> 0, ..)' 和類似的,但查詢不正確。 這涉及向表中插入新記錄,注意不要超過每個字段的預設記錄數。 理論上它應該類似於 INSERT IF ...
編輯:
@Barmar 我試過了,但我想我不明白你寫了什么(實際上我在查詢中犯了一個錯誤),我試着這樣回答:
THE QUERY AFTER YOUR RESPONSE:
INSERT INTO table1 SELECT MAX(id) FROM table1 WHERE field1 = (SELECT id from a WHERE f = field2) HAVING COUNT(*) = 1 (all fields request) VALUES (all values request)
//field1 = id from table2
//field2 = id from another table: associative value
//ORIGINAL QUERY
//FIRST COUNT:
SELECT COUNT(*) from table1 WHERE field1 = (SELECT id FROM table2 WHERE f = field2)
//AFTER THE INSERT:
INSERT INTO table1 (all fields request) VALUES (all values request)
我想到了這個我試圖向你展示的例子:
表球員:fields(ID, TEAMID, NAME) => (id=int, teamid=int 關聯表隊, name=varchar)
表隊:字段(ID NAME)=>(id=int,name=varchar)
假設一個團隊中的玩家最多為 20,因此您期望玩家表關聯的最多 20 條記錄為相同的 teamid 值,或者至少這是我們人類的想法,因為對於計算機來說也可以是無限的。 我一直在尋找一種方法,僅在實際上允許插入記錄的情況下才允許插入,在這種情況下,條件是在玩家表中每支球隊的記錄少於 21 條。
您可以使用INSERT ... SELECT
,並將條件放在SELECT
查詢中。
INSERT INTO player (teamid, name)
SELECT @teamid, @playername
FROM DUAL
WHERE (SELECT COUNT(*) FROM player
WHERE teamid = @teamid) < 20
當您需要選擇文字數據但需要在查詢中包含其他子句時, DUAL
是一個虛擬表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.