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
列的修改进行比较。例如,如果 Table1
有 ENXTPAR_ID
,则 Table2
和值 XPAR
会发生匹配。如果我将列倒置,那么您可以轻松地切换 CASE
表达式。
当然,这里最好的长期解决方案是设置可以通过相等映射的连接列,甚至可以在适当的地方添加索引。但是,有时我们会被其他人的数据集卡住,我们必须应对这种情况。
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
列的修改进行比较。例如,如果 Table1
有 ENXTPAR_ID
,则 Table2
和值 XPAR
会发生匹配。如果我将列倒置,那么您可以轻松地切换 CASE
表达式。
当然,这里最好的长期解决方案是设置可以通过相等映射的连接列,甚至可以在适当的地方添加索引。但是,有时我们会被其他人的数据集卡住,我们必须应对这种情况。