在JOIN条件中设置变量

时间:2018-02-20 11:15:53

标签: sql sql-server tsql

如何在JOIN条件中为变量赋值?

declare @t1 table(id int);
declare @t2 table(id int);
declare @var int;
select *
from @t2 t2
left outer join @t1 t1 on (t1.id = t2.id); --I wanna assign 5 to @var if condition on is true

1 个答案:

答案 0 :(得分:-1)

这个问题似乎不必要地抽象。这将有助于了解业务目标的更多细节。

这是一种方法,但请记住,这将为处理的每一行设置@var的值,并最终得到决定该值的“最后一行”。如果@ t1和@ t2中每个只有一行,那么这个表格就可以了。但是,可能有更好的方法,我在下面提到。

DECLARE @t1 TABLE(id INT);
DECLARE @t2 TABLE(id INT);
DECLARE @var INT;
SELECT
    @var =
    CASE
        WHEN @t1.id IS NOT NULL THEN 5 --Outer table match found, so set @var
        ELSE NULL --Put whatever you want here for the default value
    END
FROM
    @t2 t2
    LEFT OUTER JOIN @t1 t1 ON
        (t1.id = t2.id); --I wanna assign 5 to @var if condition on is true

如果您关心的是至少有一个匹配,并且两个表中的行可能超过1行,那么请执行此操作。它可能更准确地代表您的意图。

DECLARE @t1 TABLE(id INT);
DECLARE @t2 TABLE(id INT);
DECLARE @var INT;

IF EXISTS
    (
    SELECT 1 FROM @t1 INNER JOIN @t2 ON @t1.id = @t2.id
    )
    BEGIN
        SET @var = 5
    END