簡體   English   中英

Mysql 查詢僅在選擇計數 > n 時插入

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

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