【问题标题】:Oracle SQL INNER Join based on non-matching valuesOracle SQL INNER Join 基于不匹配的值
【发布时间】:2011-12-19 17:38:09
【问题描述】:
ColA(Table1) ColB(Table2)
AB3 AB_MNO_3
AB3 AB_PQR_3
AB4 AB_MNO_4
AB4 AB_PQR_4
我想根据上面显示的一些不相等值的两个表中的列执行Inner Join。所以,Table1 可以有 AB3 应该匹配 AB_MNO_3, AB_PQR_3 而 AB4 应该匹配 AB_MNO_4, AB_PQR_4
两个表中这些列中的其余值确实匹配。
如果有人提供相同的建议,将不胜感激。
【问题讨论】:
标签:
sql
oracle
oracle11g
inner-join
【解决方案1】:
从您的示例中:
我假设
colA 和 Colb 的前两个字符相等
和
colA 和 ColB 的最后一个字符相等
SELECT * FROM TABLE1 t1 INNER JOIN
TABLE2 t2 ON
substr(t1.ColA,0,2) = substr(t2.ColB,0,2)
AND
substr(t1.cola,length(t1.cola),1) = substr(t2.colb,length(t2.colb),1)
【解决方案2】:
SELECT * FROM Table1 tl INNER JOIN Table2 t2
ON (tl.ColA = t2.ColB OR (tl.ColA ='AB3' AND t2.ColB='AB_MNO_3')
OR (tl.ColA ='AB3' AND t2.ColB='AB_PQR_3') OR (tl.ColA ='AB4' AND t2.ColB='AB_MNO_4')
OR (tl.ColA ='AB4' AND t2.ColB='AB_PQR_4'))