在多个OR条件下联接表

  • 本文关键字:条件下 OR c# sql
  • 更新时间 :
  • 英文 :


我有一个2表一个调用a另一个调用BA的字段与B的相同

我想做一些类似的事情

everything In A
and
distinct everything In
A join B on 
A.CustomerAccount = B.CustomerAccount
Or A.Email = B.Email
Or (A.CustomerAccount = B.CustomerAccount and A.Email = B.Email)

只是简单介绍一下,还有别的办法吗?(有没有更有效的方法?(

是的,在这种情况下,最好的解决方案是尝试使用UNION运算符并查看UNION示例。

基本规则-而不是OR,您的查询将看起来像:

SELECT * 
FROM (
SELECT tpl.*, a.MidParentAId as 'MidParentId', 1 as 'IsMidParentA' 
FROM TopLevelParent tpl 
INNER JOIN MidParentA  a ON a.TopLevelParentId = tpl.TopLevelParentID
UNION
SELECT tpl.*, b.MidParentBId as 'MidParentId', 0 as 'IsMidParentA'  
FROM TopLevelParent tpl 
INNER JOIN MidParentB b ON b.TopLevelParentId = tpl.TopLevelParentID
UNION
SELECT tpl.*, 0 as 'MidParentId', 0 as 'IsMidParentA'  
FROM TopLevelParent tpl 
WHERE tpl.TopLevelParentID NOT IN (
SELECT pa.TopLevelParentID 
FROM TopLevelParent tpl
INNER JOIN MidParentA  a ON a.TopLevelParentId = tpl.TopLevelParentID
UNION
SELECT pa.TopLevelParentID 
FROM TopLevelParent tpl
INNER JOIN MidParentB b ON h.TopLevelParentId = tpl.TopLevelParentID
)
) tpl

您似乎想要:

select a.*
from a
union all
select distinct b.*
from b
where exists (select 1
from a
where b.CustomerAccount = a.CustomerAccount or
b.Email = a.Email
);

我删除了条件:

(b.CustomerAccount = a.CustomerAccount and b.Email = a.Email)

因为它是多余的。

最新更新