通过三列连接两个表,包括id

时间:2016-01-29 18:35:34

标签: sql join

我有以下表格:

表1

+----------+-----------+---------+------------+-------------+---------+
| dlr_code | dlr_yrmon | country | num_repair | num_vehicle |  cost   |
+----------+-----------+---------+------------+-------------+---------+
| J5631    |    201006 | USA     |         10 |          10 | 1300.52 |
| 01031    |    201312 | KEN     |          1 |           1 | 110.73  |

表2

+-------------+---------------------+-----------------------------------------+
| repair_date |  country_repaired   |              repair_dealer              |
+-------------+---------------------+-----------------------------------------+
| 30/06/2010  | UNITED STATES(USA)  | PREIGE DUDIN(J5631)                     |
| 28/05/2010  | UNITED KINGDOM(GBR) | BROTRS , LILN(11126)                    |

我们的想法是按年,月,国家和经销商代码将表1合并/连接到表2表中,因此表2中将列出以下列:num_repair,num_vehicle,cost在表2中添加。

如果您需要更多信息,请告诉我们。任何帮助都会非常感激。

谢谢,mils

3 个答案:

答案 0 :(得分:0)

试试这个:

select 
from table1 t1 inner join
table2 t2
on t2.repair_dealer like concat('%',t1.dlr_code,'%')
and t1.dlr_yrmon = concat(DATEPART(yyyy,t2.repair_date), DATEPART(mm,t2.repair_date))
and t2.country_repaired like concat('%',t1.country,'%')

答案 1 :(得分:0)

在不知道平台的情况下,我只能在一个月内为您提供加入方式:

SELECT t2.*, num_vehicle, num_repair
FROM table_2 t2
LEFT JOIN table_1 t1 on  
       year(t2.repair_date) = substring(t1.dlr_yrmon,1,4) 
  AND  month(t2.repair_date) = substring(t1.dlr_yrmon,5,2)

此技术可以扩展到您数据中的其他列,但我需要了解该平台,因此我知道在您的字符串中查找()的最佳方式。

答案 2 :(得分:0)

抱歉,我忘了提到我正在使用的SQL平台是RedShift(亚马逊)。

Jairaj,感谢您的回答,但我的平台不支持CONCAT功能。到目前为止,这就是我所拥有的:

选择不同的t2.vin 来自table1 t1内连接 pres_table2 t2 在REGEXP_SUBSTR(REGEXP_SUBSTR(t2.repair_dealer,' \([[:alnum:]] + \)+ $'),' [[:alnum:]] +') = t1.dlr_code AND SUBSTRING(t1.dlr_yrmon,1,4)|| ' - ' || SUBSTRING(t1.dlr_yrmon,5,6)= SUBSTRING(t2.repair_date,1,7) 限制10

感谢大家的帮助。