![](/img/trans.png)
[英]MySQL find all rows where rows with number of rows for possible values of column is less than n
[英]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.