【问题标题】:Finding duplicates in MYSQL table where data is in multiple tables (multiple conditions needed)在MYSQL表中查找数据在多个表中的重复项(需要多个条件)
【发布时间】:2013-09-15 12:41:00
【问题描述】:

我对 MYSQL 的了解比较基础,希望能提供以下帮助:

子记录架构

标识 |记录 |元素 |标题 |姓名 |类型 |价值

上表存储了通过网络表单提交的数据。

  • 每一行是一个字段(即“电话号码”、“电子邮件”、“主题”等),其中“标题”是字段的标签,“值”是提交字段的内容
  • “记录”标识每个唯一提交的表单,它是下面阐明的“记录”表 (records.id) 的外键(同一个表单提交多次生成多个唯一记录)
  • 要知道提交了哪个表单,我们需要查看另一个表格

记录架构

标识 |提交 |表格 |标题 |名称

  • id对于每个提交都是唯一的(不是每个表单都是唯一的,同一个表单提交多次会产生多个唯一的id)
  • form 是另一个表 (forms.id) 的外键,它定义了表单的结构(所有字段等),并没有真正简化检索我需要的数据。
  • records.name 是一个文本字符串,用于标识每个唯一表单,这是选择我们要查找的表单所必需的

我需要找到多次提交同一表单的所有用户(通过电子邮件),这里有一些进一步的说明:

  • 所有电子邮件地址(subrecords.value where subrecords.title = 'email')
  • 提交了多个相同的表单(由 records.name = "string-form-name" 标识)。
  • subrecords.record = record.id 仅用于连接表(每个表单提交都是唯一的并生成一个新的record.id,因此对于识别用户和表单都没有帮助)。
  • records.form 是一个外键 = forms.id(它似乎没有用,因为它需要查看另一个表使查询复杂化,使用 records.name 来识别表单似乎更简单)李>

感谢另一个用户,我有这个:

SELECT value     as email
      ,record
      ,COUNT(*)  as form_count
  FROM subrecords
 WHERE title = 'email'
   AND record IN (SELECT id
                    FROM records
                   WHERE name = 'form_name'
                 )
 GROUP BY value
         ,record
HAVING COUNT(*) > 1

它返回一个空值,但我无法缩小如何改进它以使其工作。 谢谢

【问题讨论】:

    标签: mysql sql duplicates


    【解决方案1】:

    我认为问题在于您按record 分组。给定的记录只有一种形式。

    但是,通过从 in 切换到 join 可以改进您的查询。另外,我不清楚您是否有特定的表单名称。如果是,则将and r.name = 'form_name' 添加到on 子句中:

    SELECT r.form, s.value as email, COUNT(distinct s.record)  as form_count
    FROM subrecords s join
         records r
         on s.record = r.id
    WHERE s.title = 'email'
    GROUP BY s.value, r.form
    HAVING form_count > 1;
    

    【讨论】:

    • 非常感谢!这工作得很好!非常感谢
    猜你喜欢
    • 2016-01-13
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2011-08-22
    • 2020-04-12
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多