我有两个mysql tabales。
Table1:opened_datatable
Table2:unidata
表1只有一列:Emails
表2有45列,其中三列是:Email_Office
,Email_Personal1
,Email_Personal2
如果Table2-unidata
的{{1}}列与Emails
或Table1
或Email_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
相匹配。但是我该怎么做呢?
答案 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
)