标签: sql-delete

了解此SQL查询

我是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子查询做什么?

这是查询的来源

sql oracle sql-delete

5
推荐指数
1
解决办法
369
查看次数

T-SQL删除插入的记录

我知道标题可能看起来很奇怪,但这就是我想要做的:

  1. 我有许多记录的表.
  2. 我想获得一些这些记录并将其插入其他表中.像这样的东西:

    INSERT INTO TableNew SELECT * FROM TableOld WHERE ...

  3. 棘手的部分是我希望我插入的这些行也从原始表中删除.

有没有一种简单的方法可以做到这一点,因为我唯一想到的就是使用临时表来保存所选记录,然后将它们放在第二个表中并从第一个表中删除与它们匹配的行.这是一个解决方案,但有这么多的记录(超过三百万和一半)我正在寻找一些其他的想法......

t-sql select sql-insert output sql-delete

5
推荐指数
1
解决办法
4156
查看次数

删除超过30天的mysql记录

如何删除超过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)

php mysql sql-delete

5
推荐指数
2
解决办法
2万
查看次数

SQL:如果不存在则更新,否则删除

我目前正在尝试编写一个脚本,将用户的角色更改为另一个,而不会在 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,这可能会创建重复值;因此我只需要在新值不存在时更新,否则只需删除此值

sql sql-server not-exists sql-update sql-delete

5
推荐指数
1
解决办法
4684
查看次数

MySql 查询通过保留最新的时间戳值来删除重复的行?

我面临有关 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)

php mysql timestamp sql-delete

5
推荐指数
1
解决办法
3578
查看次数

对带有外键约束的表的 SQL DELETE 查询非常慢

我在使用 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 postgresql sql-delete

5
推荐指数
1
解决办法
2926
查看次数

MySQL - 有效删除除最后 N 条以外的所有记录

我最近开始学习 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)

拜托,你能给我建议一些解决方案吗?谢谢!

mysql sql sql-delete

5
推荐指数
1
解决办法
2548
查看次数

PostgreSQL - 根据其他表中的值删除表中的行

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 想要获得奖品 …

postgresql sql-delete postgresql-9.6

5
推荐指数
1
解决办法
2358
查看次数

如何按组删除SQL Server中除第一行和最后一行之外的所有行?

我有这样的数据

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,什么都不会被删除

sql sql-server group-by sql-delete

5
推荐指数
1
解决办法
2602
查看次数

如何从 Postgres 中的 CTE(公用表表达式)中删除记录

我在 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 postgresql common-table-expression sql-delete

5
推荐指数
2
解决办法
1万
查看次数