基本的な左結合を実行しようとしている2つのまともなサイズのテーブル(200k +行)があります。それはvarchar型ですので、そこに参加したが、多くの場合、NULLするSQL JOIN ON IFの場合のベストプラクティスField1がNULL、次にField2がELSE Field1
ID1 =より良いの接合に使用することができ、各テーブル内の2つの異なるIDフィールドがあり、英数字
ID2 =は常に値、数値
を持っていますだから私は現在、このようJOININGんだけど、10分後、またはので、私はそれをキャンセルしています:
SELECT a.*,
b.fieldname
FROM TABLE1 a
LEFT JOIN TABLE2 b
ON COALESCE(a.ID1,CONVERT(Varchar(10),a.ID2)) = COALESCE(b.ID1,CONVERT(Varchar(10),b.ID2))
私は基本的にID1 ON参加することを好むが、ID1がNULLの場合には、
ID2でJOINもっと効率的な方法がありますか?あなたはID1がNULLであり、それが原因で大丈夫ですほとんどの時間を見ることができるように
ID2 ID1
300 NULL
301 NULL
309 NULL
311 311-A
311 311-B
314 NULL
316 316-1
316 316-3
:ヘルプには、データが両方のテーブルに、このように見えた場合の
**** UPDATE
考えるに感謝しましたID2はユニークですが、時にはID2の拡張があり、私はID1
に参加したい場合厥それでは、私が達成しようとするだろうことは擬似コードでこのようなものです:
SELECT a.*,
b.fieldname
FROM TABLE1 a
LEFT JOIN TABLE2 b
ON IF a.ID1 IS NOT NULL THEN
a.ID1 = b.ID1
ELSE
a.ID2 = b.ID2
END
以下のように記述されます確認することができますクエリを求めたあなたも、あなたのアプローチを使用することができます
*あなたの場合に応じて、 'WHERE TABLE2.ID IS NULL'か同等のものがあります。 –
可能であれば、テーブル構造を再考することをお勧めします。もしそうでなければ、あなたは 'union'を使って2つのクエリを使ってより良いパフォーマンスを得るでしょう。'id1'と' id2'の両方に対してテーブルに適切なインデックスがあることを確認してください。 – sgeddes