我是SQL的新手,我现在已经尝试过一段时间,但它并不适合我。 我有一个包含2列的表格,例如:
TBL
source | destination
0 | 1
1 | 2
3 | 7
9 | 10
我试图加入自己的表,其中存在一个与源相等的目的地,将它的2列重命名为S0,S1,仅从目标列中取出右边连接表并将其重命名为S2,然后将结果保存在视图中。
在示例表上,运行查询应具有以下视图:
S0 | S1 | S2
0 | 1 | 2
我尝试过这样的事情:
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 :(得分:0)
我认为首先要了解的是联接的工作原理。通常,当您从连接在一起的2个表中进行选择时,您将只有一个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
或者,如果要包含Destination与任何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(即没有找到了匹配记录),但是我将其留作说明在使用OUTER JOIN的两列之间使用ISNULL或COALESCE,这可能是一个有用的构造。)