2017-06-06 79 views
0

我是SQL新手,我一直試圖做一段時間,但它不適合我。 我有一個表2列,例如像這樣:連接表本身並保存結果在sql中查看

TBL

source | destination 
    0 |  1 
    1 |  2 
    3 |  7 
    9 |  10 

我想加盟表本身,存在一個目的地是等於源,將它重新命名爲2列到S0,S1,只從右側連接的表中取出目標列並將其重命名爲S2,然後將結果保存在視圖中。

在示例表,運行查詢應該有這樣的觀點:

​​

我試圖做這樣的事情:

CREATE VIEW V1 AS 
SELECT tbl.source as S0,tbl.destination as S1 FROM tbl 
JOIN 
SELECT Hops.destination as S2 FROM Hops 
ON tbl.S1=Hops.source 

,但它不工作。我會很感激任何幫助:)

+0

你得到什麼錯誤信息「它不工作」不給予我們有很多線索:P – Charleh

回答

0

我認爲首先要了解的是一個連接如何工作。一般來說,當你從兩個連接在一起的表中選擇時,你將只有一個select語句。事情是這樣的:

SELECT * 
FROM Table1 AS T1 
INNER JOIN Table2 AS T2 
    ON T1.Col1=T2.Col1 

注意,在這個聲明中*是選擇兩個表中的每一列。你也可以指定列爲T1.*, T2.*,或者在大多數情況下更合適,T1.Col1, T1.Col2, T2.Col2或沿着這些行。

我不知道你想達到什麼樣的細節,但我想你想是這樣的:

SELECT T1.Source AS S0, T2.Source AS S1, T2.Destination AS S2 
FROM tbl AS T1 
INNER JOIN tbl AS T2 
    ON T1.Destination=T2.Source 

或者,如果要包括記錄,其中目標不匹配任何資料來源,你可以嘗試

SELECT T1.Source AS S0, ISNULL(T2.Source, T1.Destination) AS S1, T2.Destination AS S2 
FROM tbl AS T1 
LEFT OUTER JOIN tbl AS T2 
    ON T1.Destination=T2.Source 

(編輯:實際上,我意識到SELECT子句可以簡化成SELECT T1.Source AS S0, T1.Destination AS S1, T2.Destination AS S2,因爲我們已經定義了JOIN這樣T1.Destination和T2.Source是相等的,除非T2.Source是NULL(即沒有匹配的記錄是基礎的d),但我會留下它作爲說明使用兩個列之間的ISNULL或COALESCE與OUTER JOIN,這可能是一個有用的構造。)