【问题标题】:Compare one table with another in mysql and display matched record比较mysql中的一张表并显示匹配的记录
【发布时间】:2016-09-03 08:41:46
【问题描述】:

我有两个 mysql 表。

Table1:opened_datatable
Table2:unidata

Table1 只有一列:Emails Table2有45列,其中三个分别是:Email_OfficeEmail_Personal1Email_Personal2

如果Table1Emails 列与Email_OfficeEmail_Personal1Email_Personal2 匹配,我想从Table2-unidata 获取整行。我在这里有点困惑。我尝试过这种方式:

select a.emails 
from opened_datatable a
where a.Emails in (select * 
                   from unidata b 
                   where b.email_office=a.emails 
                      or b.Email_Personal1=a.emails 
                      or b.Email_Personal2=a.Emails
                   )

它只显示第一表的一行,而我想显示Table2 -unidata 的匹配行。首先我需要提到表 2,然后我必须将它与表 1-opened_datatable 匹配。但是我该怎么做呢?

【问题讨论】:

    标签: mysql sql mysql-workbench


    【解决方案1】:

    试试这个:

    SELECT a.emails, b.* 
    FROM opened_datatable a
    INNER JOIN unidata b ON a.emails IN (b.email_office, b.Email_Personal1, b.Email_Personal2)
    

    【讨论】:

      【解决方案2】:

      您当前的查询应该返回一个错误。

      尝试使用 EXISTS 的相关子查询,与您的方法非常相似:

      select a.emails 
      from opened_datatable a
      where EXISTS 
       ( select * 
         from unidata b 
         where b.email_office=a.emails 
            or b.Email_Personal1=a.emails 
            or b.Email_Personal2=a.Emails
       )
      

      由于OR-ed 条件,您可能无法获得良好的性能。

      编辑:

      如果性能太差,您可以尝试 UNION 方法:

      select a.emails 
      from opened_datatable a
      where a.emails 
      IN
       ( select email_office 
         from unidata b 
         UNION
         select Email_Personal1 
         from unidata b 
         UNION
         select b.Email_Personal2 
         from unidata b 
       )
      

      【讨论】:

      • 感谢您的回复。不,我当前的查询没有给出错误。让我试试你的查询。
      • 我已经尝试过您的查询,但它在过去 15 分钟后仍在运行。我有一个包含 10 个 lac 数据的庞大数据库。我一直在做实验,花了很多时间,但没有那么多
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多