MySQL的:是否有可能“插入行是否具有特定的值数小于X”?
题
要给出一个简单的类比,我有一个表,如下所示:
ID(PK)| gift_giver_id(FK)| gift_receiver_id(FK)| gift_date
时可以更新在一个查询表中,从而将增加一排的方式(即另赠送一个人)只有当人拥有不到10节礼物至今(即小于10行与相同gift_giver_id)?
这样做的目的是将表大小限制为每人10节礼物。
预先感谢。
解决方案
“并将其也有,‘否则,更新的最古老的行中的字段’?”
和将其也是,相当血性显著annendum: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或更新一个查询。有人可能一起去,叫我出来这个来证明我是错的,但我认为你是缘木求鱼,除非你想进入的存储过程。
其他提示
尝试:
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
我没有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;
[编辑]代码格式不喜欢我:(
不隶属于 StackOverflow