0

私は2つのテーブルを持っています... table1とtable2。

table1 のすべてのシリアル番号を表示したい

table2にはシリアル番号もあります

table1 と table2 のシリアル番号を比較したい

次に、すべてのシリアル番号を table1 に表示し、シリアル番号が table1 にある場合は「はい」、そうでない場合は「いいえ」の 2 番目の列を表示したいと思います。

これは sql ステートメントで行うことができますか、それとも別のテーブルを作成する必要がありますか? 私はSQLサーバーを実行しています。

4

3 に答える 3

2

各テーブルのシリアル番号が一意である場合は、次を使用できます。

SELECT  Table1.SerialNumber,
        CASE WHEN Table2.SerialNumber IS NULL THEN 'No' ELSE 'Yes' END AS [IsInTable2]
FROM    Table1.SerialNumber
        LEFT JOIN Table2
            ON Table2.SerialNumber = Table1.SerialNumber

一方または両方のテーブルに重複がある場合は、次のいずれかが機能します。

SELECT  DISTINCT 
        Table1.SerialNumber,
        COALESCE([IsInTable2], 'No') [IsInTable2]
FROM    Table1.SerialNumber
        OUTER APPLY
        (   SELECT  TOP 1 'Yes' [IsInTable2]
            FROM    Table2
            WHERE   Table2.SerialNumber = Table1.SerialNumber
        ) Table2


SELECT  DISTINCT
        Table1.SerialNumber,
        CASE WHEN Table2.SerialNumber IS NULL THEN 'No' ELSE 'Yes' END [IsInTable2]
FROM    Table1.SerialNumber
        LEFT JOIN 
        (   SELECT  DISTINCT SerialNumber
            FROM    Table2
        ) Table2
            ON Table2.SerialNumber = Table1.SerialNumber
于 2012-05-24T15:45:15.887 に答える
1

これを試して

SELECT t1.serialnumber as serialnumber, Case 
WHEN t1.serialnumber = t2.serialnumber then    'YES' else 'NO' END
FROM table1 t1
LEFT JOIN table2 t2 with (nolock) on t1.serialnumber = t2.serialnumber;

うまくいけば、それはうまくいくはずです

于 2012-05-24T15:44:32.213 に答える
1

シリアル番号が各テーブルで一意であると仮定すると、外部結合を実行できます。a を使用するLEFT OUTER JOINと、左側からすべての行が取得され、オプションで右側の一致する行が取得されます。次に、一致する行が table2 にあるかどうかを比較して確認できます。

SELECT t1.serial, CASE WHEN t2.serial IS NULL THEN 'No' ELSE 'Yes' END
FROM table1 t1
LEFT OUTER JOIN table2 t2 ON t1.serial = t2.serial;
于 2012-05-24T15:42:11.517 に答える