如何在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
答案 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