2012-02-26 27 views
1

私のMySQLデータベースには、メールアドレスを格納するカラムemailを持つ2つのテーブル(MAILS &顧客)があります。2つの独立したテーブルからデータを選択

ここでは、emails.email!=customers.emailの2つの表からすべての行を選択したいと考えています。

私はシンプルにSELECT * FROM emails, customers WHERE emails.email != customers.emailを実行すると、customersテーブルのデータとともに各emails.emailがリストされます。

どうすればよいですか? DISTINCTを使用できますが、それはcustomersテーブルからのデータにのみ適用できますか?

+0

あなたがここで何をしたいかは非常に不明です。あなたはしようと明確にすることはできますか? – Jivings

答えて

2

あなたは電子メール・テーブルまたはそれらの間の一致が、これはトリックを行います電子メールフィールドに存在していない顧客テーブルのいずれかで見つかった電子メールアドレスの独自のリストを希望している場合:

SELECT DISTINCT COALESCE(e.Email, c.Email) as Email 
FROM Emails e FULL OUTER JOIN Customers c ON e.Email = c.Email 
WHERE e.Email IS NULL OR c.Email IS NULL 

を偶然にも、このタイプの状況は、FULL OUTER JOINが特定の用途に使用されていることが判明したごく少数の状況の1つです...

+0

UNIONが重複した結果を保証しない場合、 'SELECT Email FROM EメールUNION SELECT EメールFROM Customers'を使用する方が簡単ですか? –

+0

@jonathan:あなたの共用体はよりシンプルですが、両方のテーブルで一致した一致しないレコードが返され、質問に答えられません。 – Tahbaza

+0

+1:Gotcha - OK! –

2

「等しくない」結合は、実際には等価のために結合できる別の列がない限り、ほとんど役に立たない。

SELECT m.*, c.* 
    FROM mails AS m 
    JOIN customers AS c ON c.PersonID = m.PersonID 
WHERE c.email != m.email 

をしかし、余分な条件なしで、あなたは、ほぼすべての二つのテーブルのデカルト積、に近いものを持っている。だから、2つのテーブルのそれぞれにおけるPERSONID列を持っている場合、あなたは行うことができます1つのテーブルの行は、(等しくない条件のために)他のテーブルのほぼすべての行と一致します。等しくない条件がなければ、結果セットはわずかに大きくなります。

関連する問題