要给出一个简单的类比,我有一个表,如下所示:

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;

[编辑]代码格式不喜欢我:(

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top