我想删除最近插入的最多“n”行。
例如:
DELETE FROM users
WHERE user_id = %s AND group_id = %s
ORDER BY message_date DESC
我知道这是一个语法错误,在网上搜索我发现许多 stackoverflow 答案都告诉我要使用像这样的形式
DELETE FROM users
WHERE id IN (SELECT id ....)
不幸的是,我在该表上没有主键,它们只是没有自动递增的插入。
我该怎么做?
也许我应该像这样
WITH t AS
(
SELECT *
FROM users
WHERE user_id = %s AND group_id = %s
ORDER BY message_date DESC
)
DELETE FROM t
???
最佳答案
如果您的表没有任何序列 ID(例如,如果存在现有的多列主键),您仍然可以使用 IN
来过滤要删除的行:
DELETE FROM table_name
WHERE (key1, key2) IN (
SELECT key1, key2 FROM table_name ORDER BY date DESC LIMIT 2
);
对于您的具体情况,您可以使用:
DELETE FROM users
WHERE (user_id, group_id) IN (
SELECT user_id, group_id FROM users
WHERE user_id = %s AND group_id = %s
ORDER BY message_date DESC
);
关于sql - Postgres : delete rows order by without primary key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46513133/