在mysql中将一个表与另一个表进行比较并显示匹配的记录

时间:2016-09-03 08:41:47

标签: mysql sql mysql-workbench

我有两个mysql tabales。

Table1:opened_datatable
Table2:unidata

表1只有一列:Emails 表2有45列,其中三列是:Email_OfficeEmail_Personal1Email_Personal2

如果Table2-unidata的{​​{1}}列与EmailsTable1Email_Office匹配,我想从Email_Personal1获取完整行。我在这里有点困惑。我试着这样:

Email_Personal2

当我想显示匹配的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 ) 行时,它只显示第一行的第一行。首先,我需要提到表2,然后我必须将它与表1 - Table2 -unidata相匹配。但是我该怎么做呢?

2 个答案:

答案 0 :(得分:3)

试试这个:

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)

答案 1 :(得分:1)

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

使用EXISTS尝试使用Corrrelated子查询,与您的apporach非常相似:

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条件,您可能无法获得良好的效果。

编辑:

如果性能太差,您可以尝试使用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 
 )