2017-01-09 7 views
1

table A,table Bまたは両方のテーブルをSQL Serverで選択する方法はありますか?考えられる限り、私は動的SQLを使用したくありません。私はこれを同様のquestionで見ましたが、1つのテーブルだけを選択します。このことができますSQL Server:tableAまたはtableBから選択または両方

Declare @table = 1 

SELECT * 
FROM Table1 
WHERE <stuff> 
AND @Table = 1 

UNION ALL 

SELECT * 
FROM Table2 
WHERE <stuff> 
AND @Table = 2 
+0

あなたは、両方のテーブルを選択しますか? – qxg

答えて

2

は:

あなたは値@table約2つのソリューションを持っています。

あなたは両方のテーブルの選択について@table = NULLを検討することもできますし、(1の合計として例えば3及び2)@table =値を考慮することができ、 はので、あなたのクエリは次のようになります。

を選択した場合@table = NULL:

Declare @table = NULL 

SELECT * 
FROM Table1 
WHERE <stuff> 
AND (@Table = 1 OR @table IS NULL) 

UNION ALL 

SELECT * 
FROM Table2 
WHERE <stuff> 
AND (@Table = 2 OR @table IS NULL) 

あなたは(例えば3)@Table =値を選択した場合

Declare @table = 3 

SELECT * 
FROM Table1 
WHERE <stuff> 
AND (@Table = 1 OR @table = 3) 

UNION ALL 

SELECT * 
FROM Table2 
WHERE <stuff> 
AND (@Table = 2 OR @table = 3) 
+0

この回答はおそらく私はそれをやったと思います。 table1から選択する1つのケース、table2で1つ、および両方から選択する3つのケース。直進性と容易なメンテナンス性。 –

+0

@ LudvigRydahl:ありがとうございました –

+0

あなたのクエリでパフォーマンスが低下することはありませんか?私は@MayowaOの回答が好きですが、それはそれほどではありません。 –

-3

希望:あなたはこれを試すことができ

SELECT maker, Product.model AS model_1, PC.model AS model_2, price 
FROM Product INNER JOIN PC ON PC.model = Product.model 
ORDER BY maker, PC.model; 
+0

テーブルProductが空の場合、このクエリは何も返しません。 –

1

ベロ示すように、あなたはこれを達成するためにIF ... ELSEステートメントを使用することができますw。 スクリプトで何をすべきかを制御するために@tableを使いたいと思っています。

Declare @table = 1 

IF @table = 1 
BEGIN 
    SELECT * 
    FROM Table1 
    WHERE <stuff> 
END 

ELSE IF @table = 2 
BEGIN 
    SELECT * 
    FROM Table2 
    WHERE <stuff> 
END 

ELSE IF @table = 3 /* OR @table IN (1,2) --depends on how you want to handle this*/ 
BEGIN 
    SELECT * 
    FROM Table1 
    WHERE <stuff> 

    UNION ALL 

    SELECT * 
    FROM Table2 
    WHERE <stuff> 
END 

条件が満たされるとすぐにスクリプトは停止します。例えば @Table = 2 IF、スクリプトのみの次のセクションでは、実行されます:@tableがnullのとき

ELSE IF @table = 2 
BEGIN 
    SELECT * 
    FROM Table2 
    WHERE <stuff> 
END 
関連する問題