SQL Server:从tableA或tableB OR中选择
有没有办法在SQL Server中从table A
,table B
或两个表中进行选择?尽可能地,我不想使用动态SQL。我在类似的question中看到过这一点,但它只在1个表中选择。SQL Server:从tableA或tableB OR中选择
Declare @table = 1
SELECT *
FROM Table1
WHERE <stuff>
AND @Table = 1
UNION ALL
SELECT *
FROM Table2
WHERE <stuff>
AND @Table = 2
你可以试试这个:
你有两个解决方案大约价值@table。
你可以考虑@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)
如果选择@Table =值(例如3)
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)
这个答案可能是我如何做到的。一种情况是从table1中选择,一种是table2,第三种情况是从两者中进行选择。直向前,易于维护。 –
@LudvigRydahl:谢谢 –
你的查询不会影响性能吗?尽管不是那么漂亮,我还是喜欢@MayowaO的回答。 –
希望这有助于:
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;
如果表Product是空的,则此查询不会返回任何内容。 –
您可以使用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,只有脚本的以下部分将运行:
ELSE IF @table = 2
BEGIN
SELECT *
FROM Table2
WHERE <stuff>
END
你要选择这两个表时@table为空? – qxg