首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >移除双打

移除双打
EN

Stack Overflow用户
提问于 2012-04-16 14:26:29
回答 4查看 128关注 0票数 0

我正在尝试删除双打(不幸的是,有时是三重奏!)从一个MySQL表。我的问题是,唯一唯一可用的数据是主键,因此为了识别双列,必须考虑所有列。

我成功地识别了所有有双字节的记录,并将它们连同它们的双字节(包括主键)复制到表temp中。源表名为translation,它有一个名为TranslationID的整数主键。我该怎么从这里继续前进?谢谢!

编辑可用列如下:

代码语言:javascript
复制
TranslationID
LanguageID
Translation
Etymology
Type
Source
Comments
WordID
Latest
DateCreated
AuthorID
Gender
Phonetic
NamespaceID
Index
EnforcedOwner

这个问题存在于指定了Latest列的行中,这些行分配了Latest

编辑#2谢谢大家抽出时间!我通过使用WouterH的答案解决了这个问题,结果产生了以下查询:

代码语言:javascript
复制
DELETE from translation USING translation, translation as translationTemp
WHERE translation.Latest = 1
AND (NOT translation.TranslationID = translationTemp.TranslationID)
AND (translation.LanguageID = translationTemp.LanguageID)
AND (translation.Translation = translationTemp.Translation)
AND (translation.Etymology = translationTemp.Etymology)
AND (translation.Type = translationTemp.Type)
AND (translation.Source = translationTemp.Source)
AND (translation.Comments = translationTemp.Comments)
AND (translation.WordID = translationTemp.WordID)
AND (translation.Latest = translationTemp.Latest)
AND (translation.AuthorID = translationTemp.AuthorID)
AND (translation.NamespaceID = translationTemp.NamespaceID)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-16 14:36:48

您可以在没有临时表或子查询的情况下删除重复项。删除所有具有相同数据但具有不同TranslationID的行

代码语言:javascript
复制
DELETE from translation USING translation, translation as translationTemp
WHERE (NOT translation.TranslationID = translationTemp.TranslationID)
AND (translation.LanguageID = translationTemp.LanguageID)
AND (translation.Translation = translationTemp.Translation)
AND (translation.Etymology = translationTemp.Etymology)
AND // compare other fields here
票数 4
EN

Stack Overflow用户

发布于 2012-04-16 14:39:05

创建一个SELECT语句,将当前SELECT作为子select,这样您就可以返回一个应该删除的ID。然后在DELETE FROM语句中应用该SELECT。

示例(伪代码):

代码语言:javascript
复制
SELECT1 = SELECT ... AS temp; # the table you have right now

SELECT2 = SELECT TranslationID FROM (SELECT1)

最后的查询如下所示:

代码语言:javascript
复制
DELETE FROM table_name WHERE TranslationID IN (SELECT2);

您只需要在最后的查询中插入带有子SELECT的select。

将来,可以将引擎更改为InnoDB引擎,如下所示:

代码语言:javascript
复制
ALTER TABLE table_name ENGINE=InnoDB;

然后向Unique字段添加一个TranslationID约束。

票数 2
EN

Stack Overflow用户

发布于 2012-04-16 14:35:14

如果除了主键之外,双重键/三重键是相同的,那么您可以从temp中选择所有与另一个记录相同的记录,除非有比另一个主键大的主键;这将为您提供临时/记录w/每个双簧管/triplette的最小键。然后,您可以从翻译中删除这些记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10176014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档