2017-01-16 49 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