case子句中的子选择查询如何获取主查询的参数值

时间:2014-09-17 20:03:52

标签: sql

我有两个表都有id列,但TableA.id是char,TableB.id是int。现在我想加入两个表,但问题是A.id中有一些字符串无法转换为int。这是我写的查询

SELECT 
    case
        when Column1 is null
        then (select Surname from TableB
              where TableA.id = TableB.id  
             )
        else Column1
        end
FROM TableA
GO

子选择查询返回一堆记录,所以我的问题是,是否可以使用当前的TableB.id运行该子查询?我不确定我是否清楚地解释了这一点,子查询如何获得主查询的TableB.id值。感谢

2 个答案:

答案 0 :(得分:0)

有一项功能可以做到这一点。它被称为Correlated Subquery,虽然我不确定它们是否在案例陈述中起作用。

答案 1 :(得分:0)

我不确定我是否关注过您,但问题的关键在于您尝试加入ID,但它们是不同的字段类型。也许是这样的事情:

SELECT
    COALESCE(TableA.Column1, TableB.Surname)
FROM
    TableA
    LEFT OUTER JOIN TableB On
        TableA.ID = Cast(TableB.ID AS Char(64))

我只是猜测CHAR的大小,但我认为这很充足。此外,我不确定你正在使用什么数据库,因此语法可能需要稍微调整一下。