SQL:SQL连接条件中的条件运算符

时间:2018-11-29 08:10:55

标签: sql sql-server join

我试图根据某些条件连接两个表,条件之一是,如果我的列标志包含value = 1,则我使用“ =”运算符,否则使用“ <>”

这基本上是我想做的:

python3 -m nuitka --follow-imports --standalone --remove-output main.py

当然,这种语法是不正确的,但这是我想要做的。

4 个答案:

答案 0 :(得分:3)

只需在联接中使用 OR 子句:

Select A.* from Table1 A
Inner Join Table2
On (A.Flag = 1 AND A.ID = B.ID)
Or (A.Flag <> 1 AND A.ID <> B.ID)

答案 1 :(得分:0)

我宁愿不使用或不加入联接,所以:

Select A.* from Table1 A 
Inner Join Table2 On  A.ID = B.ID and Flag = 1
union
Select A.* from Table1 A 
Inner Join Table2 On  A.ID <> B.ID and Flag <> 1

答案 2 :(得分:0)

我的风格:

    Select A.* 
    from Table1 A 
   Inner Join Table2 On case when Flag=1 then Convert(bit,1) else  Convert(bit,0) end = 
   case when (A=B) then Convert(bit,1) else Convert(bit,0) end

答案 3 :(得分:0)

我几乎可以确定您的描述不是您真正想要的。

我认为您真的想要一个标志,当1时,返回Table1Table2中的行;而当0时,返回Table1中不在Table2中的行。

一种显式方法使用exists / not exists

Select a.*
from Table1 a
where (flag = 1 and
       exists (select 1 from Table2 b where b.id = a.id)
      ) or
      (flag <> 1 and 
       not exists (select 1 from Table2 b where b.id = a.id)
      );

也就是说,当flag = 1时,获得Table1中ID在Table2中的行。当flag <> 1时,获得Table1中ID不在Table2中的行。

您还可以使用LEFT JOINWHERE子句来实现此版本的逻辑:

Select a.*
from Table1 a left join
     Table2 b
     on a.id = b.id
where (flag = 1 and b.id is not null) or
      (flag <> 1 and b.id is null);