Sybase 加入 Table 并修改了一列

Sybase Joining Table with one column modified

Table1:
Col1 | Col2 | Col3
 a1  | b1   | c1
 a2  | b1   | c2
 a3  | b2   | c3

Table2:
Col1 | Col2 | Col3
 a1  | y1   | z1
 a2  | y3   | z2
 a3  | y3   | z3 

问题是 b1 实际上对应于 y1,但是它们不相同,因此无法进行比较。 b2、b3也是如此。你可以参考下面的代码来理解我的意思。

现在我想在两个表上应用内部联接,使用两个表中的 Col1 和 Col2。

我试过这段代码,但它不起作用。

SELECT Col1,
        (CASE Col2
        WHEN 'ENXTPAR_ID' THEN 'XPAR'
        WHEN 'ENXTAMS_ID' THEN 'XAMS'
        WHEN 'ENXTLIS_ID' THEN 'ENXL'
        ELSE Col2
        END) as Col2,
        Col3
FROM Table1
INNER JOIN Table2
ON Table1.Col1= convert(varchar,Table2.Col1)
AND Table1.Col2 = Table2.Col2

希望问题清楚。

我认为 CASE 表达式需要在 ON 条件中,而不是在 select:

SELECT t1.*
FROM Table1 t1
INNER JOIN Table2 t2
    ON t1.Col1 = CONVERT(varchar, t2.Col1) AND
       t2.Col2 = CASE t1.Col2
                 WHEN 'ENXTPAR_ID' THEN 'XPAR'
                 WHEN 'ENXTAMS_ID' THEN 'XAMS'
                 WHEN 'ENXTLIS_ID' THEN 'ENXL'
                 ELSE t1.Col2 END;

以上逻辑假定您要将 Table2.Col2 列与 Table1.Col2 列的修改进行比较。例如,如果 Table1ENXTPAR_ID,则 Table2 和值 XPAR 会发生匹配。如果我将列倒置,那么您可以轻松地切换 CASE 表达式。

当然,这里最好的长期解决方案是设置可以通过相等映射的连接列,甚至可以在适当的地方添加索引。但是,有时我们会被其他人的数据集卡住,我们必须应对这种情况。