1

設計が不適切なデータベースを使用していますが、問題が発生しました。

「一意ではないID」で結合する必要のあるテーブルが2つあります。現在データベースで動作しているソフトウェアは、エラーが発生した場合、IDに「0値」を設定します。これは、それらを結合しようとすると、0の値で大量のレコードが結合されることを意味します。

2つのテーブルとそれらの一意ではないIDフィールドの例の下に、それらを結合したい

tbl1    tbl2
-----------       
2        2
3        6
4        5
0        3
0        4
6        0
5        0
----------

私が達成したいのはこれです

tbl1    tbl2
-----------         
2        2
3        3
4        4
0        * (no join)
0        * (no join)
6        6
5        5
----------

つまり、tbl1の「0値」をtbl2の他のすべての「0値」と結合させたくありません。私はまだ結合なしでレコードtbl1を持ちたいです。

これは1つのクエリで可能ですか?

追加情報:SQL SERVER 2005であり、IDを一意にするオプションはありません。

4

3 に答える 3

3

テーブルの完全な構造を示していないので、いくつかの列を作成する必要がありますが、基本的には次のようになります。

select *
from tbl1
   join tbl2 
     on tbl1.id = tbl2.t1_id 
    and tbl1.that_flag <> 0

and条件の一部である条件に注意してくださいjoin

于 2012-09-25T12:37:07.537 に答える
1

これはトリックを行う必要があります

SELECT * FROM tbl1
LEFT JOIN tbl2 ON tbl1.value = tbl2.value and tbl2.value <> 0

これにより、*として入力した2つにnull値が与えられます。

于 2012-09-25T12:44:05.463 に答える
1
SELECT tbl1.id, tbl2.id
FROM dbo.tbl1 
LEFT OUTER JOIN dbo.tbl2
ON tbl1.id = NULLIF(tbl2.id, 0);
于 2012-09-25T12:42:19.463 に答える