2017-01-16 48 views
-2

我有一个表SQL服务器 - 一张桌子和一个地方之间加入查询

表-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 
+1

你说你有两个表,但只包含一个表。 10003从哪里来?它是硬编码的吗? – Mureinik

+5

MySql不是Sql Server。请不要标记不相关的产品。 –

+0

无论您想要搜索什么值,都将这些值存储在临时表或表变量中,然后使用左连接。 – Wanderer

回答

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 

您可能需要从你目前的做法改变输入格式

+0

完美适用于SQL Server的第一个查询。我不知道为什么我的问题被拒绝投票,因为我一直努力在单个查询中获得解决方案而不使用循环或临时表。这个很安静。 –

+0

@AmitPandey - Downvote可能有两个原因。 1.你没有表现出解决问题的努力(查询)。 2.标记不相关的数据库引擎。当你使用'Sql Server'时,不要标记'Mysql'都是非常不同的数据库引擎。 –

+0

哦,我的坏...感谢指出。 –

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