在tbl1.col IN tbl2.col上的左连接表

时间:2012-10-22 21:04:41

标签: sql

是否可以在左连接子句中包含“IN”语句? 我有两个表有两列:

Table 1:                  Table 2:

Column1:                  Column2:

192192,                   192192
119202                    119202
810395                    810395
975643,                   975643
908574,,                  908574

如您所见,tbl1.col1的条目可以包含逗号尾随的条目或根本没有逗号。我需要连接两个表,其中第1列包含第2列或它们相等的位置。有意义的是加入column1包含第2列的地方。也许有更好的方法来完成连接?

我需要加入这两个来访问表2中的数据。所以列只需要对齐,同时在第1列中允许一个或两个潜在的逗号。任何建议?

3 个答案:

答案 0 :(得分:1)

如果这只是某种一次性交易或临时表而不是你真正的产品表: (无论逗号在哪里,这个都有效)

select <column list>
from table1 t1
join table2 t2 on replace(t1.col1, ',','') = t2.col2

select <column list>
from table1 t1
join table2 t2 on  cast(t2.col2 as varchar (10)) like t1.col1+'%'

(根据拖曳列的数据类型,你可能需要也可能不需要施法,我假设一个是varchar而另一个是整数)

或 (这仅在值始终为相同长度时才有效

select <column list>
from table1 t1
join table2 t2 on left(t1.col1,6) = t2.col2

如果这是一个真正的prod表,那么你可能会在函数上加入性能问题,所以要修改数据。

答案 1 :(得分:1)

我认为rtrim()非常适合:

SELECT *
FROM   table1 t1
JOIN   table2 t2 ON trim(t1.col1, ',') = t2.col2;

答案 2 :(得分:1)

此外,您可能只想substr函数修剪第一个表列并使用左外连接:

使用substr

 select t1.col1, t2.col2
 from table1 t1 left join table2 t2
 on substr(t1.col1, 0, length(t1.col1)-1) = t2.col2;

使用replace

 select t1.col1, t2.col2
 from table1 t1 left join table2 t2
 on replace(t1.col1, ',' , '')= t2.col2;

以上查询都应该适用于MySQL和Oracle。