我试图根据某些条件连接两个表,条件之一是,如果我的列标志包含value = 1,则我使用“ =”运算符,否则使用“ <>”
这基本上是我想做的:
python3 -m nuitka --follow-imports --standalone --remove-output main.py
当然,这种语法是不正确的,但这是我想要做的。
答案 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
时,返回Table1
中Table2
中的行;而当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 JOIN
和WHERE
子句来实现此版本的逻辑:
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);