做一个简单的类比,我有一个表格如下:
身份证 (PK) | gift_giver_id (FK) | gift_receiver_id (FK) | 礼物日期
是否可以在单个查询中更新表,仅当该人到目前为止的礼物少于 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;
[编辑] 代码格式不喜欢我 :(