SQL Server - 在表和Where IN查询之间进行连接

时间:2017-01-16 14:50:20

标签: sql-server

我有一张桌子

表-A

--------------------
Column_1 | Column_2
--------------------
10001    | 0.4
10002    | 0.5

我可以在不创建临时表或触发两个不同查询的情况下获得以下输出

Select Column_1, Column_2 
from Table_A 
where Column_1 in (10001, 10002, 10003)

如下面的输出

--------------------
Column_1 | Column_2
--------------------
10001    | 0.4
10002    | 0.5
10003    | null

2 个答案:

答案 0 :(得分:3)

使用LEFT JOIN& Table valued constructor

SELECT Tc.Column_1,
       A.Column_2
FROM   (VALUES(10001),
              (10002),
              (10003)) tc(Column_1)
       LEFT JOIN Table_A a
              ON tc.Column_1 = A.Column_1 

如果您使用的是Mysql

SELECT Tc.Column_1,
       A.Column_2
FROM   (SELECT 10001 Column_1
        UNION ALL
        SELECT 10002
        UNION ALL
        SELECT 10003) tc
       LEFT JOIN Table_A a
              ON tc.Column_1 = A.Column_1 

您可能需要更改当前方法的输入格式

答案 1 :(得分:2)

不确定您是否将内联视图视为临时表;我没有。

SQL无法创建数据,只能选择存在的数据。话虽这么说,我们可以创建一个包含所需数据的内联视图,然后从中进行选择。

SELECT tmp.Col1, A.Column_2 
FROM (SELECT 10001 as col1 union all 
      SELECT 10002 union all 
      SELECT 10003) tmp
LEFT JOIN Table_A  A
 on tmp.col1 = A.Column_1