是否可以在左连接子句中包含“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列中允许一个或两个潜在的逗号。任何建议?
答案 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。