好的,所以这可能是一个加载的问题。我想在两个条件下在ID上加入两个表:
另外,有更好的方法来显示表吗?
表1:
Comp ID Year
94372 2016
P1983 2011
874324 2015
0342135 2013
732423 2015
表2:
ID User
30094372 TYVSW
2000342135 PFDBE
100732423 PLECD
P1983 ASNWQ
加入表
T1CompID T1Year T2ID T2User
94372 2016 30094371 TYVSW
P1983 2011 P1983 ASNWQ
874324 2015 Null Null
0342135 2013 2000342135 PFDBE
732423 2015 100732423 PLECD
答案 0 :(得分:0)
在第一个表中的ID条件与第二个表中的ID完全匹配时执行LEFT JOIN
,或者第一个表中的ID与第二个表的第四个字符中的子串匹配。 / p>
SELECT t1."Comp ID" AS T1CompID,
t1.Year AS T1Year,
t2.ID AS T2ID,
t2.User AS T2User
FROM table1 t1
LEFT JOIN table2 t2
ON t1."Comp ID" = t2.ID OR -- exact match
t1."Comp ID" = SUBSTRING(t2.ID, 4) -- match from fourth character of t2.ID
对于SQL Server,您可能需要使用[Comp ID]
来转义此列名。
答案 1 :(得分:0)
试试这个
SELECT * FROM tb1 t1
LEFT JOIN tb2 t2
ON IF(length(t1.ID) = length(t2.ID),t1.ID = t2.ID,substring(t2.ID,4) = t1.ID);
+---------+------+------------+-------+
| ID | Year | ID | User |
+---------+------+------------+-------+
| 94372 | 2016 | 30094372 | TYVSW |
| 0342135 | 2013 | 2000342135 | PFDBE |
| 732423 | 2015 | 100732423 | PLECD |
| P1983 | 2011 | P1983 | ASNWQ |
| 874324 | 2015 | NULL | NULL |
+---------+------+------------+-------+
5 rows in set (0.00 sec)
答案 2 :(得分:0)
为了提高性能,您可能需要使用两个左连接:
select t1.compid, t1.year,
coalesce(t2e.id, t2p.id) as t2id
coalesce(t2e.user, t2p.user) as t2.user
from table1 t1 left join
table2 t2e
on t1.compid = t2.compid left join
table2 t2p
on t1.compid = substring(t2p.id, 4, 100) and
t2e.compid is null;
从第4个字符开始获取值的确切表达式在数据库与数据库之间略有不同。
这种方法的一个优点是,即使第二个表中有两行匹配,它也只会返回完全匹配。