1

私はまだSQLの初心者であり、問​​題に直面しています。私が持っているのは、特定の条件に基づいて一時テーブルに特定の ID を最初に選択することです。

SELECT DISTINCT ID
INTO #TEMPTABLE
FROM ICC
WHERE ICC_Code = 1 AND ICC_State = 'CA'

クエリの後半で、他のテーブルからの他のデータと共に、ID の別の非常に長いリストを SELECT します。その SELECT は幅が約 20 列で、私の結果セットです。私ができるようにしたいのは、その列の各値がTRUEまたはFALSEのいずれかである結果セットに追加の列を追加することです。行の ID が #TEMPTABLE にある場合、追加の列の値は TRUE になるはずです。そうでない場合は FALSE。このようにして、追加された列は、各行の ID が にあるかどうかに応じて、各行で TRUE または FALSE になります#TEMPTABLE

2 番目の SELECT は次のようになります。

SELECT ID,
       ColumnA,
       ColumnB,
       ...
       NEWCOLUMN
FROM ...

各行の NEWCOLUMN の値は、返されたその行の ID が #TEMPTABLE にあるかどうかによって異なります。

ここで何かアドバイスはありますか?

ありがとうございました、

マット

4

4 に答える 4

1

#TEMPTABLE に参加したままにすると、ID が存在しない場所で NULL が返されます

SELECT ID,
       ColumnA,
       ColumnB,
       ...
       T.ID IS NOT NULL AS NEWCOLUMN -- Gives 1 or 0 or True/false as a bit
FROM ... X
LEFT JOIN #TEMPTABLE T
ON T.ID = X.ID -- DEFINE how the two rows can be related unquiley
于 2012-12-12T02:21:21.423 に答える
0

結果クエリを #TEMPTABLE ON ID に LEFT JOIN する必要があります。これにより、ID がある場合は ID が得られ、IDNULLがない場合は、1 または 0 が必要な場合はこれで済みます (SQL Server の場合) ISNULL(#TEMPTABLE .ID,0)<>0.

パフォーマンスのためのコーディングに関するいくつかの注意事項:

  1. 定義上、ID 列は一意であるため、DISTINCT冗長で不要な処理が発生します (別のテーブルの ID でない限り)。

  2. これをクエリで直接使用するのではなく、一時テーブルに保存するのはなぜですか?

于 2012-12-12T02:20:12.877 に答える
0

ユニオンとサブクエリを使用できます。

Select . . . . , 'TRUE'
From . . .
Where ID in 
(Select id FROM #temptable)
UNION
SELECT . . . , 'FALSE'
FROM . . .
WHERE ID NOT in 
(Select id FROM #temptable)

したがって、上部の SELECT ... FROM ... WHERE ID IN ( Subquery ) は、ID がテンテーブルにある場合に SELECT を実行します。

ID がtemptable にない場合、下の部分は SELECTを実行します。

両方の SELECT ステートメントが同じ数の列を返すため、UNION 演算子は 2 つの結果を適切に結合します。

于 2012-12-12T02:24:14.997 に答える
0

他の誰かが Union で言っていたことを拡張するには、次のようにしてください。

SELECT id, TRUE AS myColumn FROM  `table1` 
UNION 
SELECT id, FALSE AS myColumn FROM  `table2` 
于 2012-12-12T02:34:46.360 に答える