当前位置: 首页 > 面试题库 >

MySQL使用多列为重复选择记录

管景天
2023-03-14
问题内容

我想要从表中选择记录,或将它们插入新的空白表中,其中多个列与数据库中的另一条记录相同。问题类似于此问题。
在MySQL中查找重复记录
但是,仅比较一列。另外,我的一列,例如下面的示例中的C列,是整数。就像上面链接中的问题一样,我希望返回每一行。不幸的是,我对联接如何如何自行解决还不够熟悉。我知道下面的代码与实际的SQL代码完全不同,这只是我可以想到的最清晰的方式来描述我要进行的比较。

SELECT ColumnE, ColumnA, ColumnB, ColumnC from table where (
  Row1.ColumnA = Row2.ColumnA &&
  Row1.ColumnB = Row2.ColumnB &&
  Row1.ColumnC = Row2.ColumnC
)

任何帮助将不胜感激,我看到的所有“从MYSQL中选择重复项”问题都只使用一列作为比较。


问题答案:

如果要计算多个列之间的重复项,请使用group by

select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
from table
group by ColumnA, ColumnB, ColumnC

如果只希望重复的值,则计数大于1。可使用以下having子句获得此值:

select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
from table
group by ColumnA, ColumnB, ColumnC
having NumDuplicates > 1

如果您实际上希望所有重复的行都返回,则将最后一个查询返回到原始数据:

select t.*
from table t join
     (select ColumnA, ColumnB, ColumnC, count(*) as NumDuplicates
      from table
      group by ColumnA, ColumnB, ColumnC
      having NumDuplicates > 1
     ) tsum
     on t.ColumnA = tsum.ColumnA and t.ColumnB = tsum.ColumnB and t.ColumnC = tsum.ColumnC

假设所有列值都不为NULL,这将起作用。如果是这样,请尝试:

     on (t.ColumnA = tsum.ColumnA or t.ColumnA is null and tsum.ColumnA is null) and
        (t.ColumnB = tsum.ColumnB or t.ColumnB is null and tsum.ColumnB is null) and
        (t.ColumnC = tsum.ColumnC or t.ColumnC is null and tsum.ColumnC is null)

编辑:

如果有NULL值,也可以使用NULL-safe运算符:

     on t.ColumnA <=> tsum.ColumnA and
        t.ColumnB <=> tsum.ColumnB and
        t.ColumnC <=> tsum.ColumnC


 类似资料:
  • 问题内容: 这个问题很简单,由于某种原因我无法获得正确的结果以仅显示重复记录 样本输出 预期产量 我如何做到这一点? 问题答案: sqlfiddle

  • 我有下表 我的表格 id|col1|col2|col3|col4|col5 我使用的是spring数据。我有以下存储库/DAO类 我想取一些列,比如在一个道号中我想取col1和col2,在另一个道号中我想取col1、col3、col5等等... 我想要

  • 基本上,对于每个user_id,我需要类似的东西, 我想最终的结果只是返回所有的总数。

  • 问题内容: 在MySQL中,是否只能选择存在某些内容的列? 例如,我有以下查询: 我试图仅选择电话以813开头并且phone2中包含某些内容的行。 问题答案: 比较空字符串的值: 请注意,值解释为。

  • 问题内容: 我想选择,,从多个选择其中有10个选项。我只想选择这三个选项。 HTML代码: selenium键代码: 我尝试使用此代码。使用此代码,我可以选择第一个选项,即“ P0_ENGLISH”。但是,选择第一个选项后,我得到一个错误: 问题答案: 要从 Multi Select 元素中选择多个 选项 ,可以使用 ActionChains 模拟 Control单击* ,如下所示: *