0

是否可以在左连接子句中有“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 列中使用一个或两个逗号。有什么建议吗?

4

3 回答 3

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 表,那么在加入函数时可能会遇到性能问题,因此请修复数据。

于 2012-10-22T21:08:42.047 回答
1

我认为rtrim()这是完美的:

SELECT *
FROM   table1 t1
JOIN   table2 t2 ON trim(t1.col1, ',') = t2.col2;
于 2012-10-22T21:11:10.293 回答
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 中工作。

于 2012-10-22T21:33:50.567 回答