我是oracle数据库的新手,可以帮助我理解这个查询.此查询消除了表中的重复项.
DELETE FROM table_name A
WHERE ROWID > (SELECT min(rowid)
FROM table_name B
WHERE A.key_values = B.key_values);
Run Code Online (Sandbox Code Playgroud)
欢迎任何改进查询的建议.
编辑:不,这不是家庭作业,我不明白的是,子查询正在做什么以及ROWID > On子查询做什么?
我知道标题可能看起来很奇怪,但这就是我想要做的:
我想获得一些这些记录并将其插入其他表中.像这样的东西:
INSERT INTO TableNew SELECT * FROM TableOld WHERE ...
棘手的部分是我希望我插入的这些行也从原始表中删除.
有没有一种简单的方法可以做到这一点,因为我唯一想到的就是使用临时表来保存所选记录,然后将它们放在第二个表中并从第一个表中删除与它们匹配的行.这是一个解决方案,但有这么多的记录(超过三百万和一半)我正在寻找一些其他的想法......
如何删除超过30天的mysql记录?我的代码将删除昨天插入的所有记录.
require('../conn_db.php');
mysql_select_db("my_news",$conn);
mysql_query("SET NAMES utf8");
mysql_query("DELETE FROM my_news WHERE date < DATE_SUB(NOW(), INTERVAL 1 MONTH)");
mysql_close("my_news");
Run Code Online (Sandbox Code Playgroud)
和mysql表
date int(10)
1321095600
1322107200
...
1328288400
1328290440
Run Code Online (Sandbox Code Playgroud) 我目前正在尝试编写一个脚本,将用户的角色更改为另一个,而不会在 SQL Server 数据库中创建重复项。
例如:
User_ID Role_ID
---------------------
A X
A Z
B Y
C X
C Y
D Y
Run Code Online (Sandbox Code Playgroud)
用户可能有多个角色。
我想更改它,以便角色 Y 中的所有用户现在都是角色 X 的成员,角色 Y 将不再存在:
User_ID Role_ID
---------------------
A X
A Z
B X
C X
D X
Run Code Online (Sandbox Code Playgroud)
通过将所有 Y 角色更新为 X,这可能会创建重复值;因此我只需要在新值不存在时更新,否则只需删除此值
我面临有关 mysql 表更新的问题。我有包含 5 列的表,包括 ID、NAME、TIMESTAMP 和其他 2 列。我的问题是我想删除那些 ID 和 NAME 都与另一行的 ID 和 NAME 匹配的行,同时保留最新的 TIMESTAMP 行。
我正在尝试以下查询,但它显示了错误:
#1093 - 不能在 FROM 子句中指定目标表 'dummy1' 进行更新
查询是:
delete from dummy1 where LAST_USED_DATE not in(
select max(LAST_USED_DATE) from dummy1
group by ID,NAME);
Run Code Online (Sandbox Code Playgroud) 我在使用 SQL DELETE 查询时遇到了一些麻烦。我在一个有 2 个表(父和子)的数据库(postgres 9.3)上工作。孩子通过外键与父母建立关系。
父表
CREATE TABLE parent
(
id bigint NOT NULL,
...
CONSTRAINT parent_pkey PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)
子表
CREATE TABLE child
(
id bigint NOT NULL,
parent_id bigint,
...
CONSTRAINT child_pkey PRIMARY KEY (id),
CONSTRAINT fk_adc9xan172ilseglcmi1hi0co FOREIGN KEY (parent_id)
REFERENCES parent (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
Run Code Online (Sandbox Code Playgroud)
我在两个表中都插入了 200'000 个没有任何关系的条目(Child.parent_id = NULL)。
但是像下面这样的 DELETE 查询的持续时间超过 20 分钟。而且即使没有 WHERE 条件。
DELETE FROM Parent; …Run Code Online (Sandbox Code Playgroud) 我最近开始学习 SQL,现在被要求对表执行一个简单的删除,保留每个用户的最后 100 条记录。我正在研究将其存档的最佳方法(更有效的方法),并找到了一些可能的解决方案(SQL 查询:从表中删除除最新 N 之外的所有记录?,从 SQL 中的数据库表中删除除前 n之外的所有记录),但它是那种错综复杂的让我根据效率选择一个。所以我在这里寻求你的帮助。
这是我们保存用户访问日志的名为“访问”的表。
access:
- id (autoincrement) - primary
- userid (integer 11) - key
- refer (varchar 100)
- date (date/time)
Run Code Online (Sandbox Code Playgroud)
我的想法是每次同一用户进入系统时,就在插入新日志之前,从用户 ID 中删除旧记录。
我已经尝试了以下代码,但出现错误:此版本的 MySQL 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询”
DELETE FROM
access
WHERE
id NOT IN (
SELECT id FROM access WHERE userid = 10 ORDER BY id DESC LIMIT 100
);
Run Code Online (Sandbox Code Playgroud)
拜托,你能给我建议一些解决方案吗?谢谢!
将SQLFiddle附加到这个问题。
我有两个表,我想删除inventoryfruitsforuser带有fruitsForPrize表的表
它看起来像这样:
select * from fruitsForPrize where "prizeID" = 1
prizeID|fruitID
-------+-------
1 |1
1 |1
1 |1
1 |1
1 |2
1 |2
1 |3
1 |3
1 |4
1 |4
1 |4
1 |5
1 |5
1 |5
select * from inventoryfruitsforuser where "userID" = 1
userID |fruitID
-------+-------
1 |1
1 |1
1 |1
1 |2
1 |2
1 |3
1 |4
1 |5
1 |5
Run Code Online (Sandbox Code Playgroud)
现在,用户 ID 1 想要获得奖品 …
我有这样的数据
Id Name AuthorId
----------------
1 AAA 2
2 BBB 2
3 CCC 2
4 DDD 3
5 EEE 3
Run Code Online (Sandbox Code Playgroud)
我需要一个查询,如果有超过 2 个,除了第一个和最后一个,它将按组 AuthorId 删除所有行。
比如上面的数据中,应该删除第二行,因为,对于AuthorId = 2,我有3行,但是对于AuthorId = 3,什么都不会被删除
我在 Postgres 中使用 CTE 编写了以下查询。现在我无法从中删除记录。
WITH cte AS (
SELECT
firstname,
lastname,
country,
ROW_NUMBER() OVER (
PARTITION BY
firstname,
lastname,
country
) row_num
FROM
employee
)
delete from cte
where row_num >1
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,它显示错误:
关系“cte”不存在
这是我的表“员工”的示例
id firstname lastname country
1 "Raj" "Gupta" "India"
2 "Raj" "Gupta" "India"
3 "Mohan" "Kumar" "USA"
4 "James" "Barry" "UK"
5 "James" "Barry" "UK"
6 "James" "Barry" "UK"
Run Code Online (Sandbox Code Playgroud) sql-delete ×10
sql ×6
mysql ×3
postgresql ×3
php ×2
sql-server ×2
group-by ×1
not-exists ×1
oracle ×1
output ×1
select ×1
sql-insert ×1
sql-update ×1
t-sql ×1
timestamp ×1