相关疑难解决方法(0)

如何删除重复的行?

从相当大的SQL Server表中删除重复行的最佳方法是什么(即300,000多行)?

当然,由于RowID身份字段的存在,行不会是完美的重复.

MyTable的

RowID int not null identity(1,1) primary key,
Col1 varchar(20) not null,
Col2 varchar(2048) not null,
Col3 tinyint not null
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server duplicates

1254
推荐指数
31
解决办法
118万
查看次数

MySQL错误1093 - 无法在FROM子句中指定更新的目标表

story_category我的数据库中有一个表有损坏的条目.下一个查询返回损坏的条目:

SELECT * 
FROM  story_category 
WHERE category_id NOT IN (
    SELECT DISTINCT category.id 
    FROM category INNER JOIN 
       story_category ON category_id=category.id);
Run Code Online (Sandbox Code Playgroud)

我试图删除它们执行:

DELETE FROM story_category 
WHERE category_id NOT IN (
    SELECT DISTINCT category.id 
    FROM category 
      INNER JOIN story_category ON category_id=category.id);
Run Code Online (Sandbox Code Playgroud)

但我得到了下一个错误:

#1093 - 您无法在FROM子句中为更新指定目标表'story_category'

我怎么能克服这个?

mysql subquery mysql-error-1093 sql-delete

556
推荐指数
10
解决办法
42万
查看次数

在mysql中使用DISTINCT SELECT更新表

假设我有一个表格,其中包含有关a的信息

game (PRIMARY INT id, TINYINT offline)
Run Code Online (Sandbox Code Playgroud)

和第二个表格,其中包含有关该游戏的详细信息:

gamedetail (PRIMARY INT id, INT game_id (fk to game table), TINYINT offline) 
Run Code Online (Sandbox Code Playgroud)

细节经常更新,并从各种程序.在那里我设置了细节的离线标志.我没有编程设置游戏本身的离线标志的可能性.(我确实将游戏的离线标志设置为0,但是,如果我找到在线详细信息).但我想通过更新查询在数据库中设置此信息.这个想法是这个SELECT:

SELECT DISTINCT game.id FROM game 
    LEFT JOIN gamedetail AS gdon 
           ON (gdon.game_id = game.id AND gdon.offline = 0)
    LEFT JOIN gamedetail AS gdoff 
           ON (gdoff.game_id = game.id AND gdoff.offline = 1)
WHERE gdoff.id IS NOT NULL AND gdon.id IS NULL;
Run Code Online (Sandbox Code Playgroud)

这给了我很好的所有游戏,我只有离线游戏细节.所以我想将此作为UPDATE语句的输入,如下所示:

UPDATE game SET game.offline=1 WHERE game id IN (
    SELECT DISTINCT game.id FROM game 
        LEFT JOIN gamedetail AS …
Run Code Online (Sandbox Code Playgroud)

mysql sql-update

4
推荐指数
1
解决办法
6757
查看次数