3

做一个简单的类比,我有一个表格如下:

身份证 (PK) | gift_giver_id (FK) | gift_receiver_id (FK) | 礼物日期

是否可以在单个查询中更新表,仅当该人到目前为止的礼物少于 10 件时(即少于 10 行具有相同的 gift_giver_id)才会添加一行(即给一个人的另一个礼物) ?

这样做的目的是将餐桌大小限制为每人 10 件礼物。

提前致谢。

4

3 回答 3

3

尝试:

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
于 2010-01-07T05:34:32.400 回答
2

“这是否也是,'否则,更新最旧行中的字段'?”

这也是一个相当血腥的重要附录: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。很可能有人会来找我来证明我错了,但我认为你要求的是不可能的,除非你想进入存储过程。

于 2010-01-07T05:48:06.740 回答
1

我不是 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;

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

于 2010-01-07T05:38:10.597 回答