标签: sql-delete

SQL删除基于连接条件

可以使用连接查询基于满足条件删除记录吗?

例如,我有一个链接表连接3条记录.我现在的查询删除了这个表中的一个记录,其中一个id不是IN()一个内爆的Php数组.我已经意识到,如果数组中不存在id,并且它们属于基于另一个表的链接的某个其他表,则查询应仅从该表中删除记录.

sql join sql-delete

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

在SQL语法中,如果您打算使用'where',那么'delete from'中的'from'是可选的吗?

我是SQL的新手.我们有一些代码可以在SQL Server 2005/2008,Oracle 10和Sybase上运行.

我正在编写一个脚本来试图找出给定存储过程修改(但不丢弃)的表,例如insert,updatedelete.

delete一个竟然是令人费解的-有时我看到这样的语句:

delete phone_book where ... 
Run Code Online (Sandbox Code Playgroud)

而不是:

delete from phone_book where ...
Run Code Online (Sandbox Code Playgroud)

那么...... from在这种情况下,关键字真的是可选的吗?这会导致任何问题吗?这只是一种糟糕的风格,还是无所谓?

我还没有找到一个参考T-SQL,这将使from可选.我想这可以统一我上面提到的所有3个供应商.

欢迎提出问题/意见/链接(或者是否欢迎?).

sql t-sql delete-row sql-delete

17
推荐指数
2
解决办法
9374
查看次数

如何在postgresql中将DELETE的返回值插入INSERT?

我试图从一个表中删除一行,并将一些额外的数据插入另一个表.我知道这可以在两个单独的命令中完成,一个用于删除,另一个用于插入新表.但是我试图将它们组合起来并且它不起作用,这是我目前的查询:

insert into b (one,two,num) values delete from a where id = 1 returning one, two, 5;

运行时,我收到以下错误:

错误:"删除"或附近的语法错误

任何人都可以指出如何实现这一目标,还是有更好的方法?还是不可能?

postgresql sql-insert sql-delete

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

DELETE在另一个表中没有匹配的记录

有两个表由id链接:

item_tbl (id)
link_tbl (item_id)
Run Code Online (Sandbox Code Playgroud)

有些记录中item_tbl没有匹配的行link_tbl.一个可以计算其金额的选择将是:

SELECT COUNT(*)
FROM link_tbl lnk LEFT JOIN item_tbl itm ON lnk.item_id=itm.id
WHERE itm.id IS NULL
Run Code Online (Sandbox Code Playgroud)

我想删除那些孤儿记录(那些在其他表中没有匹配的记录),link_tbl但我能想到的唯一方法是:

DELETE FROM link_tbl lnk
WHERE lnk.item_id NOT IN (SELECT itm.id FROM item_tbl itm)
Run Code Online (Sandbox Code Playgroud)

2003年的16,844,347个孤儿记录中有
3,033,811个记录的link_tbl
262,086,253条记录. 服务器有4GB RAM和8核CPU.item_tbl
link_tbl

EXPLAIN DELETE FROM link_tbl lnk
WHERE lnk.item_id NOT IN (SELECT itm.id FROM item_tbl itm)
Run Code Online (Sandbox Code Playgroud)

返回:

Delete on link lnk  (cost=0.00..11395249378057.98 rows=131045918 width=6)
->  Seq Scan …
Run Code Online (Sandbox Code Playgroud)

sql postgresql exists bigdata sql-delete

15
推荐指数
3
解决办法
4万
查看次数

从redshift中删除重复行

我试图删除我的redshift表中的一些重复数据.

以下是我的查询: -

With duplicates
As
(Select *, ROW_NUMBER() Over (PARTITION by record_indicator Order by record_indicator) as Duplicate From table_name)
delete from duplicates
Where Duplicate > 1 ;
Run Code Online (Sandbox Code Playgroud)

这个查询给了我一个错误.

Amazon无效操作:语法错误在"删除"或附近;

不确定问题是什么,因为with子句的语法似乎是正确的.以前有人遇到过这种情况吗?

sql sql-delete amazon-redshift

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

SQL Server 2000删除顶部(1000)

我有一个大型SQL Server数据库,其中包含大约4500万条记录的表.我正在归档此表,并且需要删除两年多以前的所有条目.我插入到我的存档表工作正常,但我在删除时遇到效率问题.

我的问题在于当前表中的索引.我想在1000个记录块中删除(和存档插入).为此,我需要确定满足要求的"最高"1000条记录(大于两年).行上的DateTime标记是聚簇索引,因此这对于抓取行非常有用.但是SQL 2000不允许DELETE TOP 1000 ....所以我需要做类似的事情:

DELETE FROM <table> WHERE [UniqueID] IN 
(SELECT TOP 1000 [UniqueID] FROM <table> WHERE [DateTime] < @TwoYearsAgo)
Run Code Online (Sandbox Code Playgroud)

如果将UniqueID编入索引,这将非常有用.由于它不是,这需要很长时间(它扫描表中要删除的1000条记录中的每一条).表上没有唯一标识记录的其他索引.我被告知在UniqueID上计算索引的成本太高,因为这是一个实时数据库.任何人都可以指出一种优化此查询的方法吗?

sql sql-server optimization sql-delete

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

在SQLite数据库中仅保留N个最后记录,按日期排序

我有一个SQLite数据库,我需要执行以下操作:仅保留最后N条记录,按日期排序.你是怎样做的?

sql sqlite sql-delete

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

MySQL插入重复键; 删除?

有没有办法删除MySQL中重复键的记录?

假设我们在数据库中有一个具有特定主键的记录,我们尝试添加另一个具有相同键ON DUPLICATE KEY UPDATE的记录- 只是更新记录,但是如果已经存在,是否有删除记录的选项?点击按钮即可实现简单的输入/输出功能.

mysql key duplicate-removal sql-delete

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

REPLACE INTO,它是否重新使用PRIMARY KEY?

REPLACE INTOMySQL中的函数以删除和插入行的方式工作.在我的表中,主键(id)是自动递增的,所以我期望它删除然后id在数据库的尾部插入一个表.

但是,它出乎意料并插入相同的id!这是预期的行为,还是我在这里遗漏了什么?(我id在调用REPLACE INTO语句时没有设置)

mysql sql duplicates sql-insert sql-delete

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

如何在SQLite中删除重复项?

我有一个SQLite DB的声明:

SELECT messdatum, count(*) as anzahl 
from lipo 
GROUP BY Messdatum 
ORDER BY anzahl desc;
Run Code Online (Sandbox Code Playgroud)

导致一些行,这表明我有一些相同的重复Messdatum.如何从我的sqlite数据库中删除重复项?(它应该删除anzahl-1记录,其中messdatum是相同的吗?)有人建议吗?

PS:我发现此链接如何从Microsoft删除重复但有sqlite方言的问题.由于sqlite语法,我得到了一些错误.所以我能做到:

 INSERT into holdkey SELECT messdatum, count(*) as anzahl from lipo group by messdatum having count(*) > 1;

 INSERT into holddups SELECT DISTINCT lipo.* from lipo, holdkey where lipo.Messdatum = holdkey.messdatum ;

 DELETE lipo from lipo, holdkey where lipo.messdatum = holdkey.messdatum;
Run Code Online (Sandbox Code Playgroud)

这是delete命令的错误.我怎样才能做到这一点?我试图将holdkey.anzahl更新为lipo中的另一个col

UPDATE lipo,holdkey set lipo.duplettenzahl = holdkey.anzahl WHERE lipo.messdatum = holdkey.messdatum ; 
Run Code Online (Sandbox Code Playgroud)

但这也是不可能的.如果我将脂肪中的anzahl作为dublettenzahl我可以删除所有来自lipo的记录,其中dublettenzahl> 0.请帮忙!谢谢

sqlite sql-delete

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