我知道标题可能看起来很奇怪,但这就是我想要做的:
我想获得一些这些记录并将其插入其他表中.像这样的东西:
INSERT INTO TableNew SELECT * FROM TableOld WHERE ...
棘手的部分是我希望我插入的这些行也从原始表中删除.
有没有一种简单的方法可以做到这一点,因为我唯一想到的就是使用临时表来保存所选记录,然后将它们放在第二个表中并从第一个表中删除与它们匹配的行.这是一个解决方案,但有这么多的记录(超过三百万和一半)我正在寻找一些其他的想法......
使用rowid删除是否有严重的禁忌症?
DELETE FROM NETATEMP.SFAC_TESTATA_CASISTICHE
WHERE ROWID IN ( SELECT MIN (ROWID)
FROM NETATEMP.SFAC_TESTATA_CASISTICHE
GROUP BY ID_CASO,
DESCRIZIONE_TECNICA,
DESCRIZIONE_ANALISI,
PDF,
SCARTI,
DATA_INIZIO_ANALISI,
DATA_FINE_ANALISI,
DATA_INSTRADAMENTO,
DATA_RISOLUZIONE,
STRINGA_RICERCA,
SETTIMANA,
DATA_INIZIO_SETT,
DATA_FINE_SETT,
FATTURAZIONE,
IN_ELABORAZIONE
HAVING COUNT (1) > 1);
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) 我有一个包含数百个表的 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) 我在使用 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 想要获得奖品 …
我目前正在使用 Azure 托管的 SQL 服务器实例处理应用程序。应用程序数据不占用大量物理空间,但有很多记录。有时我需要删除大量记录,例如可以说 500 万条记录。正如您可能猜到的那样,这需要大量的时间和资源。问题是我不需要很多资源来做其他事情。为了在 30 分钟或更长时间内不将 DTU 固定在 100%,我需要拥有更多正常使用下所需的资源。我不在乎删除在合理范围内需要多长时间。根据我的研究,我找不到限制使用的好方法。如果我能以某种方式只允许 50% 的使用率用于操作或类似的东西,那就太好了。也许我错过了一些可以提高删除效率的东西,但我不这么认为。它是一个非常简单的表,在我用来删除的列上有一个索引。看起来最大的主要组件是数据 IO。如果有人对我如何管理这个有任何好的想法,我们将不胜感激。
我有这样的数据
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-delete ×10
sql ×6
mysql ×3
postgresql ×2
sql-server ×2
azure ×1
group-by ×1
not-exists ×1
oracle ×1
output ×1
php ×1
select ×1
sql-insert ×1
sql-update ×1
t-sql ×1
timestamp ×1