我有三个包含以下列的表:
Table 1: Hostname, OS, Confidence
Table 2: Hostname, Manufacturer, Model, Serial_Number, Architecture, Memory
Table 3: Hostname, MAC, Interface
Run Code Online (Sandbox Code Playgroud)
应该是这样,但我还不能确定,如果一个主机名存在于一个表中,那么它就会出现在所有三个表中。我不确定为什么这些数据被分成三个不同的表,但目前是这样,这就是我提出问题的原因。
如何将这三张表合二为一?我有以下将结合其中两个的内容,但我不确定如何修改它以包含 Table3:
SELECT
COALESCE(Table1.Hostname, Table2.Hostname) AS Hostname,
Manufacturer,
Model,
Serial_Number,
Architecture,
Memory
FROM Table1
FULL OUTER JOIN Table2
ON Table1.Hostname = Table2.Hostname
Run Code Online (Sandbox Code Playgroud)
有(至少)两种方法可以FULL
在 2 个以上的表之间编写连接。FULL JOIN
多次使用,ON
条件中的表达式会变长一点,但很简单:
SELECT
COALESCE(t1.Hostname, t2.Hostname, t3.HostName) AS Hostname,
t1.OS,
t1.Confidence,
t2.Manufacturer,
-- the rest, non common columns
FROM Table1 AS t1
FULL OUTER JOIN Table2 AS t2
ON t2.Hostname = t1.Hostname
FULL OUTER JOIN Table3 AS t3
ON t3.Hostname = COALESCE(t1.Hostname, t2.Hostname) ;
Run Code Online (Sandbox Code Playgroud)
首先使用UNION
公共列的 a,然后LEFT
加入:
SELECT
u.Hostname,
t1.OS,
t1.Confidence,
t2.Manufacturer,
-- the rest, non common columns
FROM
( SELECT Hostname FROM Table1 UNION
SELECT Hostname FROM Table2 UNION
SELECT Hostname FROM Table3
) AS u
LEFT OUTER JOIN Table1 AS t1
ON t1.Hostname = u.Hostname
LEFT OUTER JOIN Table2 AS t2
ON t2.Hostname = u.Hostname
LEFT OUTER JOIN Table3 AS t3
ON t3.Hostname = u.Hostname ;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14600 次 |
最近记录: |