gpt4 book ai didi

mysql - MYSQL表中多表查找重复项(需要多个条件)

转载 作者:行者123 更新时间:2023-11-29 00:26:11 24 4
gpt4 key购买 nike

我对 MYSQL 的了解相当基础,希望能在以下方面提供帮助:

subrecords schema

id | record | element | title | name | type | value

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

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

records schema

id | submitted | form | title | name

  • 每次提交的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

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

最佳答案

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

但是,通过从 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;

关于mysql - MYSQL表中多表查找重复项(需要多个条件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18812485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com