如何使用特定条件使用多个表

时间:2019-05-30 05:36:27

标签: sql sql-server tsql

我有两个表TableA和TableB,这些表中的数据将根据特定过程进行填充(如果值最终确定,则TableA类似于临时表,则数据将移至TableB)

基于该X条件 我将从TableA中选择值,否则从TableB中选择

If X=10 condition 
select col1,col2,col3,col4 from TableA
else
select col1,col2,col3,col4 from TableB

两个表TableA和TableB将具有相同的表结构,所以在这里我不想通过单独更改表名来再次使用相同的代码语句。是否可以使用其他任何方法而无需通过更改来重复执行select语句桌子。

4 个答案:

答案 0 :(得分:1)

或者您也可以尝试:

DECLARE @x AS INT
DECLARE @sqlquery AS NVARCHAR(100)

SET @x = 10 --ignore this if you already have a value for x

SET @sqlquery = 'SELECT * FROM '+ CASE WHEN @x = 10 THEN 'TableA' ELSE 'tableB' END

EXEC SP_EXECUTESQL @sqlquery

您还可以阅读: https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql?view=sql-server-2017

答案 1 :(得分:0)

我想你想要这个:

DECLARE @tableName varchar(20)
IF 1=1
set @tableName = 'table1'
ELSE
set @tableName = 'table2'

EXEC ('SELECT * FROM ' + @tableName)

答案 2 :(得分:0)

您可以简单地将条件放入UNION语句中。

如果@condition = 1,我们仅从tableA中选择,否则我们仅从tableB中选择。

DECLARE @condition bit

SET @condition = 0

SELECT * FROM  [dbo].[TableA] WHERE @condition = 1
UNION
SELECT * FROM  [dbo].[TableB] WHERE @condition != 1

答案 3 :(得分:0)

我要实现的方法是使用变量和联合查询。该变量允许您为where子句提供真正错误的条件,以便从所需表中返回所有内容,而从不需要表中返回所有内容。这些表的结构使您可以在并集语句中使用查询,以便可以在一处看到所有代码。

Declare @x int = 10
Select col1, col2, col3, col4 from TableA where @x=10
Union
Select col1, col2, col3, col4 from TableB where @x<>10;