簡體   English   中英

MySQL:如果“具有特定值的行數小於X”,是否可以“INSERT”?

[英]MySQL: Is it possible to “INSERT if number of rows with a specific value is less than X”?

舉一個簡單的比喻,我有一個表格如下:

id(PK)| gift_giver_id(FK)| gift_receiver_id(FK)| gift_date

是否有可能在單個查詢中更新表格,只有當此人到目前為止少於10個禮物(即少於10行具有相同的gift_giver_id)時,才會為一個人添加一行(即另一個禮物) ?

這樣做的目的是將桌子大小限制為每人10個禮物。

提前致謝。

嘗試:

insert into tablename
   (gift_giver_id, gift_receiver_id, gift_date)  
select GIVER_ID, RECEIVER_ID, DATE from Dual where  
   (select count(*) from tablename where gift_receiver_id = RECEIVER_ID) < 10

“那也是,'否則,更新最舊行中的字段'?”

這也是一個相當血腥的重要預言:P

我不會在單個查詢中執行復雜的操作,我首先選擇測試最舊的,然后相應地更新或插入。

不知道你在SQL以外使用的語言,我只會堅持使用非SQL部分的偽代碼。

SELECT TOP 1 id FROM gifts
WHERE (SELECT COUNT(*) FROM gifts WHERE gift_giver_id = senderidvalue
ORDER BY gift_date ASC) > 9;

{if result.row_count then}

INSERT INTO gifts (gift_giver_id, gift_receiver_id,gift_date)
VALUES val1,val2,val3

{else}

UPDATE gifts SET gift_giver_id = 'val1',
gift_receiver_id = 'val2',gift_date = 'val3'
WHERE {id = result.first_row.id}

您的請求的問題是您正在嘗試查找單個查詢以執行SELECT以及INSERT或UPDATE。 有人可能會出現並在此問我,以證明我錯了,但我認為你要求的是不可能的,除非你想進入存儲過程。

我不是SQL大師,但我認為以下內容應該有效:(假設禮品的表名):

INSERT INTO gifts (gift_giver_id, gift_receiver_id,gift_date)
SELECT DISTINCT senderidvalue,receiveridvalue,datevalue FROM gifts
WHERE (SELECT COUNT(*) FROM gifts WHERE gift_giver_id = senderidvalue ) < 10;

[編輯]代碼格式不喜歡我:(

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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