【问题标题】:I have 2 tables.T1-master table,T2-historic data.Want EXISTS query for Name column for all the records in T1 which have multiple Name entries in T2我有 2 个表。T1-主表,T2-历史数据。想要对 T1 中所有在 T2 中有多个名称条目的记录的名称列进行 EXISTS 查询
【发布时间】:2020-01-21 22:31:57
【问题描述】:

我有 2 张桌子。

  • T1-主表
  • T2-历史数据

我想要对 T1 中所有在 T2 中有多个名称条目的记录的名称列进行 EXISTS 查询。

select first_name
     , * 
  from T1
 where exists (select First_name from T1 where T1.First_name != T2.First.name)

【问题讨论】:

  • 请提供样本数据、期望的结果以及对您想要的内容的连贯解释。
  • 您的意思是子查询是from T2
  • T2.First.name 应该是T2.First_name
  • 两个表关联的外键是什么?

标签: mysql sql exists


【解决方案1】:

相关子查询似乎是这里最直接的方法。它也可能变得更有效,因为没有聚合起作用:

SELECT T1.*
FROM T1
WHERE (SELECT COUNT(*) FROM T2 WHERE T1.first_name = T2.T1.first_name) > 1

【讨论】:

    【解决方案2】:

    您可以使用选择T2 中所有重复名称的子查询来连接主表

    SELECT T1.*
    FROM T1
    JOIN (
        SELECT first_name
        FROM T2
        GROUP BY first_name
        HAVING COUNT(*) > 1
    ) AS x ON x.first_name = T1.first_name
    

    【讨论】:

      【解决方案3】:

      我认为你需要这个:

      select t1.* from T1
      where exists (select 1 
                      from T2
                     where T1.First_name = T2.First_name
                     having count(*)>1
                   )
      

      【讨论】:

      • 没有必要使用GROUP BY,因为您只选择具有相同名字的行。
      猜你喜欢
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 2020-06-29
      • 1970-01-01
      相关资源
      最近更新 更多