2016-09-03 7 views
1

私は2つのmysqlテーブルを持っています。mysqlのあるテーブルと別のテーブルを比較し、一致するレコードを表示する

Table1:opened_datatable 
Table2:unidata 

表1は、1列のみを持っている:Email_OfficeEmail_Personal1Email_Personal2

私はどちらかとTable1試合のTable2-unidataEmailsかの列から完全な行を取得したい:Emails 表2は、45列、それらの3があるがありますEmail_OfficeまたはEmail_Personal1またはEmail_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 
        ) 

は、その最初のテーブルの行を1つだけ示す:私は少し混乱しhere.Iがこのようにしようとした取得しています。まず、表2について言及する必要があります。次に、表1- opened_datatableと一致させる必要があります。しかし、どうしたらいいですか?

答えて

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) 
+0

それは働いた。どうもありがとう。 –

1

現在のクエリはエラーを返します。

使用Corrrelatedサブクエリを試してみてください、あなたapporachと非常によく似て、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 
) 
+0

ご返信いただきありがとうございます。現在のクエリでエラーが発生していないあなたの質問を聞かせてください。 –

+0

私はあなたのクエリを試しましたが、それは過去15分間続いています。私は10 lacのデータの巨大なデータベースを持っています。私はその上で実験を続け、何度も時間がかかるが、これらはあまりない。 –

関連する問題