我有多个表,需要连接多个公共属性,这样不同的属性可以显示在一个表中。
表格1
+--------+---------+-------+--------+
| make | model | year | kms |
+--------+---------+-------+--------+
| toyota | corolla | 1999 | 25000 |
| toyota | camry | 2002 | 50000 |
+--------+---------+-------+--------+
表2
+--------+---------+-------+---------+
| make | model | year | mileage |
+--------+---------+-------+---------+
| toyota | corolla | 1999 | 20 |
| toyota | qualis | 2004 | 25 |
+--------+---------+-------+---------+
表3
+--------+----------+-------+-------+
| make | model | year | color |
+--------+----------+-------+-------+
| toyota | camry | 2002 | blue |
| toyota | rav4 | 2006 | green |
+--------+----------+-------+-------+
我正在做以下事情来加入结果
select
* from table1 as a
full join table2 as b
using (make, model, year)
full join table3 as c
using (make, model, year)
我需要的是如下表格。
+--------+---------+-------+-------+----------+--------+
| make | model | year | kms | mileage | color |
+--------+---------+-------+-------+----------+--------+
| toyota | corolla | 1999 | 25000 | 20 | |
| toyota | camry | 2002 | 50000 | | blue |
| toyota | qualis | 2004 | | 25 | |
| toyota | rav4 | 2006 | | | green |
+--------+---------+-------+-------+----------+--------+
但是我得到的结果是make,model,year
与某些行的空值重复。
我如何获得所需要的。请注意,对于我正在使用的真实数据集,每个表有5个common attributes
,每个表有大约20-40个different attributes
。
重复可能是由于您正在使用的完整联接。将这些更改为左连接,如下所示:
SELECT
A.MAKE, A.MODEL, A.YEAR, T1.KMS, T2.MILEAGE, T3.COLOR
FROM
(SELECT MAKE, MODEL, YEAR FROM TABLE1 UNION
SELECT MAKE, MODEL, YEAR FROM TABLE2 UNION
SELECT MAKE, MODEL, YEAR FROM TABLE3) A
LEFT JOIN TABLE1 T1
ON T1.MAKE = A.MAKE AND T1.MODEL = A.MODEL AND T1.YEAR = A.YEAR
LEFT JOIN TABLE2 T2
ON T2.MAKE = A.MAKE AND T2.MODEL = A.MODEL AND T2.YEAR = A.YEAR
LEFT JOIN TABLE3 T3
ON T3.MAKE = A.MAKE AND T3.MODEL = A.MODEL AND T3.YEAR = A.YEAR;;