Sql 在联接条件中设置变量

Sql 在联接条件中设置变量,sql,sql-server,tsql,Sql,Sql Server,Tsql,如何为联接条件中的变量赋值? 这个问题似乎不必要地抽象。这将有助于了解业务目标的更多细节 这里有一种方法,但请记住,这将为处理的每一行设置@var的值,最后一行决定该值。如果@t1和@t2中的每一行中只有一行,则此表单将起作用。但是,可能有更好的方法,我在下面介绍了 DECLARE @t1 TABLE(id INT); DECLARE @t2 TABLE(id INT); DECLARE @var INT; SELECT @var = CASE WHEN @t1

如何为联接条件中的变量赋值?


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

这里有一种方法,但请记住,这将为处理的每一行设置@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
如果您关心的只是至少有一个匹配项,并且两个表中可能有多行,那么请执行此操作。它可能更准确地表达你的意图

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

不管怎样,你都需要加入它。。。如果条件为假会发生什么?案例陈述。但提出一些示例输入,或完整的查询,或至少在某个场景中获得更好的答案,因为您的问题缺乏内容。请至少提供所涉及的表的结构、所需的条件以及条件计算为true和false时的ON子句。您可以在@var1=@var2Question上使用左外部联接表1 t1。问题太模糊,请使用场景进行澄清,或者至少说明意图。我想知道我是否可以在没有额外加入的情况下提出请求。我们知道如果合同存在,那么它就有合作伙伴。我必须在co.construcd=w.construcd上写左外连接ccContract co,在co.PartnerID=v.PartnerID上写左外连接ccPartner v,但我想在co.construcd=w.construcd和@hasPartner=1上写这样的左外连接ccContract co,并在select语句中使用@hasPartner,这是真的吗?与C++中的校验表达式类似,如果左操作数为真,则向右移动operand@AlexanderMordovskiy如果不需要额外的联接,可以使用相关子查询,如LEFT JOIN ccContract AS co ON co.construcd=w.construcd AND EXISTS从ccPartner v中选择1,其中v.PartnerID=co.PartnerID。有道理?这很有帮助,尤其是当连接由于某种原因导致返回额外的行时,您所关心的只是存在性。我明白了。但我有机会将变量设置为ON范围吗?为什么要设置变量?从“选择”窗口发射列是否足够?变量是标量的,因此它们与集合没有关联。此查询返回多行还是仅返回一行?所有合同都有合作伙伴吗,还是只有一部分?您的评论上面说,我们知道,如果合同存在,那么它有合作伙伴。这意味着所有契约都有Partner,所以如果您的JOIN返回一个契约,那么hasPartner自动为true。我错了。我的意思是在co.construcd=w.construcd上左外连接ccContract co,并设置@hasPartner=1 OK。我的例子是混乱。他有个名字。我想设置@name。收缩主键,w。收缩主键可以为空。我想在co.construcd=w.construcd上左外连接ccContract co并选择@name=co.name,但如果co.construcd w.construcd选择@name=。我想知道我可以设置变量吗。我知道正确的sol是SELECT co.名称,但请告诉我是否可以将var设置为条件。非常感谢。
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