可以使用连接查询基于满足条件删除记录吗?
例如,我有一个链接表连接3条记录.我现在的查询删除了这个表中的一个记录,其中一个id不是IN()一个内爆的Php数组.我已经意识到,如果数组中不存在id,并且它们属于基于另一个表的链接的某个其他表,则查询应仅从该表中删除记录.
我是SQL的新手.我们有一些代码可以在SQL Server 2005/2008,Oracle 10和Sybase上运行.
我正在编写一个脚本来试图找出给定存储过程修改(但不丢弃)的表,例如insert,update和delete.
在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个供应商.
欢迎提出问题/意见/链接(或者是否欢迎?).
我试图从一个表中删除一行,并将一些额外的数据插入另一个表.我知道这可以在两个单独的命令中完成,一个用于删除,另一个用于插入新表.但是我试图将它们组合起来并且它不起作用,这是我目前的查询:
insert into b (one,two,num) values delete from a where id = 1 returning one, two, 5;
运行时,我收到以下错误:
错误:"删除"或附近的语法错误
任何人都可以指出如何实现这一目标,还是有更好的方法?还是不可能?
有两个表由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) 我试图删除我的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 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上计算索引的成本太高,因为这是一个实时数据库.任何人都可以指出一种优化此查询的方法吗?
我有一个SQLite数据库,我需要执行以下操作:仅保留最后N条记录,按日期排序.你是怎样做的?
有没有办法删除MySQL中重复键的记录?
假设我们在数据库中有一个具有特定主键的记录,我们尝试添加另一个具有相同键ON DUPLICATE KEY UPDATE的记录- 只是更新记录,但是如果已经存在,是否有删除记录的选项?点击按钮即可实现简单的输入/输出功能.
REPLACE INTOMySQL中的函数以删除和插入行的方式工作.在我的表中,主键(id)是自动递增的,所以我期望它删除然后id在数据库的尾部插入一个表.
但是,它出乎意料并插入相同的id!这是预期的行为,还是我在这里遗漏了什么?(我id在调用REPLACE INTO语句时没有设置)
我有一个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.请帮忙!谢谢
sql-delete ×10
sql ×7
mysql ×2
postgresql ×2
sql-insert ×2
sqlite ×2
bigdata ×1
delete-row ×1
duplicates ×1
exists ×1
join ×1
key ×1
optimization ×1
sql-server ×1
t-sql ×1