作成したいビューに問題があります。私は左の外側の結合で結合された2つのテーブル、例えばtableA
とtableB
を持っています。ここではtableB
が外側に結合されています。左の外部結合のSQL where節
テーブルBの状態が4の行だけを選択したいので、クエリにWHERE state = 4
を追加します。 tableB
に一致する行のないすべての行が結果から削除されるため(結果は状態が4ではないため)、結果セットはかなりトリミングされます。私もWHERE state = 4 OR state IS NULL
を試しましたが、どちらも動作しません(state
は技術的には状態がない場合はNULL
ではありません)。
私が必要とするのは、実際に行がある場合にのみ評価されるWHERE
ステートメントです。そのようなことはありますか?
テーブルBの代わりにjoin (SELECT * FROM tableB WHERE state = 4)
という2つのオプションがあります。または、同じWHERE
ステートメントでビューを作成して、代わりにそのビューに参加してください。パフォーマンスの最適なオプションは何ですか?
これは、ところでSQL Server 2008 R2です。
それは左のを防ぐ必要があるため 'WHERE状態= 4または状態がNULL'が動作しない理由を仕事にしようとする興味深いものになるだろうが、内側に変換された結合します参加する。 –
@Damien_The_Unbeliever - これは、TableBのTableAではなくTableAのTableBに一致する行がないTableAからすべての行を取得します。状態<> 4. http://data.stackexchange.com/stackoverflow/qt/110316/ –
@ Damien_The_Unbeliever:3つの状態があります:状態= 4と一致、状態<> 4と一致、一致なし – gbn