加入宽桌(10个独特的cols)

问题描述 投票:2回答:1

我有多个表,需要连接多个公共属性,这样不同的属性可以显示在一个表中。

表格1

+--------+---------+-------+
|  make  |  model  | r_yr  |
+--------+---------+-------+
| toyota | corolla |  1999 |
| toyota |  camry  |  2002 |
| toyota |  qualis |  2004 |
| toyota |  rav4   |  2006 |
+--------+---------+-------+

表2

+--------+---------+--------+
|  make  |  model  |  kms   |
+--------+---------+--------+
| toyota | corolla |  25000 |
| toyota |  camry  |  50000 |
+--------+---------+--------+

表4

+--------+---------+---------+
|  make  |  model  | mileage |
+--------+---------+---------+
| toyota | corolla |      20 |
| toyota |  qualis |      25 |
+--------+---------+---------+

表5

+--------+----------+-------+
|  make  |  model   | colr  |
+--------+----------+-------+
| toyota |  camry   | blue  |
| toyota |  rav4    | green |
+--------+----------+-------+

我正在做以下事情来加入结果

select a.make, a.model,a.r_yr,b.kms,c.mileage,d.colr
    from table1 as a
    left join table2 as b
    on b.make=a.make and b.model=a.model and b.r_yr=a.r_yr
    left join table3 as c
    on c.make=a.make and c.model=a.model and c.r_yr=a.r_yr
    left join table4 as d
    on d.make=a.make and d.model=a.model and d.r_yr=a.r_yr

这给出了如下表格

+--------+---------+-------+-------+----------+--------+
|  make  |  model  | r_yr  |  kms  |  mileage |  colr  |
+--------+---------+-------+-------+----------+--------+
| toyota | corolla |  1999 | 25000 |       20 |        |
| toyota |  camry  |  2002 | 50000 |          |  blue  |
| toyota |  qualis |  2004 |       |       25 |        |
| toyota |  rav4   |  2006 |       |          | green  |
+--------+---------+-------+-------+----------+--------+

然而我的问题是,对于我正在使用的真实数据集,每个表有5个common cols,每个表大约20-40个unique attributes,需要在b.kms, ....,c.mileage, ......,d.colr,....的形式中在查询中指定20-40个col名称。有没有必要通过指定除common cols或其他方式之外的所有列来指定那些唯一列?

sql postgresql
1个回答
4
投票

你不能做像SELECT all except x,y,z ...这样的事情 但您可以使用USING子句而不是JOIN ... ON来简化此查询


但是:ぁzxswい

http://sqlfiddle.com/#!17/fa97a/6

select *
from table1 as a
left join table2 as b
USING (make, model)
left join table3 as c
USING (make, model)
left join table4 as d
USING (make, model)

注意:在上面的例子中,我只使用两个常见的列| make | model | r_yr | kms | mileage | colr | |--------|---------|------|--------|---------|--------| | toyota | camry | 2002 | 50000 | (null) | blue | | toyota | corolla | 1999 | 25000 | 20 | (null) | | toyota | qualis | 2004 | (null) | 25 | (null) | | toyota | rav4 | 2006 | (null) | (null) | green | ,因为在你的例子中(make, model)不是一个公共列,因为它只在table1中

© www.soinside.com 2019 - 2024. All rights reserved.