我想删除基于两列的重复行,但需要保留所有行的1行.
重复行可以超过两行,如,
ID NAME PHONE
-- ---- ----
1 NIL 1234
2 NIL 1234
3 NIL 1234
4 MES 5989
Run Code Online (Sandbox Code Playgroud)
我想从3以上删除2行中的任意一行并保留1行.
我有存储过程:
ALTER PROCEDURE [dbo].[k_ShoppingCart_DELETE]
@cartGUID nvarchar
AS
DELETE FROM
[dbo].[k_ShoppingCart]
WHERE
CartGUID = @cartGUID
Run Code Online (Sandbox Code Playgroud)
当我执行这个时,
exec dbo.k_ShoppingCart_DELETE '32390b5b-a35a-4e32-8393-67d5629192f0'
Run Code Online (Sandbox Code Playgroud)
结果:0行受影响.
但是,当我尝试这个查询时:
Delete FROM k_ShoppingCart Where CartGUID = '32390b5b-a35a-4e32-8393-67d5629192f0'
Run Code Online (Sandbox Code Playgroud)
结果:2行受影响.
这有什么问题?
这是我正在使用的查询:
SELECT k_id, COUNT(k_id) AS k_count
FROM template_keyword_link
WHERE k_id IN(1,2,3,4,5)
GROUP BY k_id;
Run Code Online (Sandbox Code Playgroud)
此查询返回类似
1 |的内容 6
2 | 1
3 | 4
4 | 1
5 | 9
我想添加类似的东西AND COUNT(k_id) = 1
我最终得到
2 | 1
4 | 1
但是我无效使用组功能.
我该怎么做呢?
我的问题的另一部分是.
这可以用作删除语句吗?
就像是
DELETE FROM
template_keyword_link tkl
LEFT JOIN keywords k
ON tkl.k_id = k.k_id
WHERE tkl.k_id
IN(SELECT k_id, COUNT(k_id) AS k_count
FROM template_keyword_link
WHERE k_id IN(1,2)
GROUP BY k_id
HAVING k_count = 1);
Run Code Online (Sandbox Code Playgroud)
我明白了 …
假设我正在运行导入的一半,而不是运行
SELECT COUNT(*) FROM table_being_imported
Run Code Online (Sandbox Code Playgroud)
我点击ctrl+ R,键入table_being_im并点击返回,只是为了发现我刚刚发布的恐怖事件
DELETE FROM table_being_imported
Run Code Online (Sandbox Code Playgroud)
哎呀.所以我点击ctrl+ C并得到告诉:
Ctrl-C -- sending "KILL QUERY 627" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted
Run Code Online (Sandbox Code Playgroud)
它会删除任何行吗?只是假设,当然......
码:
create table coltype (coltype varchar(5));
insert into coltype values ('typ1');
create table colsubtype (coltype varchar(5), colsubtype varchar(5));
insert into colsubtype values ('typ2', 'st1');
insert into colsubtype values ('typ2', 'st2');
create table table1 (col1 varchar(5), coltype varchar(5), colsubtype varchar(5));
insert into table1 values ('val1','typ1', 'st1');
insert into table1 values ('val2','typ1', 'st2');
insert into table1 values ('val3','typ1', 'st3');
insert into table1 values ('val4','typ2', 'st1');
insert into table1 values ('val5','typ2', 'st2');
insert into table1 values ('val6','typ2', 'st3');
insert into table1 values ('val7','typ3', …Run Code Online (Sandbox Code Playgroud) 我是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子查询做什么?
运行查询之后
delete from table tablename
记录可以恢复吗?据我所知,Postgresql只是将记录标记为已删除.
我知道标题可能看起来很奇怪,但这就是我想要做的:
我想获得一些这些记录并将其插入其他表中.像这样的东西:
INSERT INTO TableNew SELECT * FROM TableOld WHERE ...
棘手的部分是我希望我插入的这些行也从原始表中删除.
有没有一种简单的方法可以做到这一点,因为我唯一想到的就是使用临时表来保存所选记录,然后将它们放在第二个表中并从第一个表中删除与它们匹配的行.这是一个解决方案,但有这么多的记录(超过三百万和一半)我正在寻找一些其他的想法......
我有一个包含数百个表的 MySQL 数据库。
我需要删除基于名为“companyId”的公共列的所有表中的记录 - 该列存在于数据库的所有表中。
如何删除所有表中 columnId = somenumber 的所有记录?
先感谢您 !
伊万诺 C.
@SocratesG我尝试了你的存储过程,但我得到以下创建SP的信息:
ERROR 1064:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 '@TableName VARCHAR(128); 附近使用的正确语法。
DECLARE @MyColumn VARCHAR(128);
SET @MyColumn = 'compan' at line 4
SQL Statement:
CREATE PROCEDURE `deletePortalInstance` ()
BEGIN
DECLARE @TableName VARCHAR(128);
DECLARE @MyColumn VARCHAR(128);
SET @MyColumn = 'companyId'
DECLARE MyCursor CURSOR FOR
(SELECT OBJECT_NAME(c.id) AS ObjectName
FROM dbo.syscolumns c
WHERE OBJECTPROPERTY(c.id,'ISTABLE') = 1 --Search for tables only
AND c.name = @MyColumn)
OPEN MyCursor
FETCH NEXT FROM …Run Code Online (Sandbox Code Playgroud) 我有这两个表,并希望从ms_author中删除所有不在author中的作者。
author (160万行)
+-------+-------------+------+-----+-------+
| Field | Type | Null | Key | index |
+-------+-------------+------+-----+-------+
| id | text | NO | PRI | true |
| name | text | YES | | |
+-------+-------------+------+-----+-------+
Run Code Online (Sandbox Code Playgroud)
ms_author (1.2亿行)
+-------+-------------+------+-----+-------+
| Field | Type | Null | Key | index |
+-------+-------------+------+-----+-------+
| id | text | NO | PRI | |
| name | text | YES | | true |
+-------+-------------+------+-----+-------+
Run Code Online (Sandbox Code Playgroud)
这是我的查询:
DELETE
FROM ms_author AS m
WHERE …Run Code Online (Sandbox Code Playgroud) sql-delete ×10
sql ×5
mysql ×4
postgresql ×2
database ×1
join ×1
oracle ×1
output ×1
select ×1
sql-insert ×1
sql-server ×1
t-sql ×1