SQL内连接如果没有找到省略条件

时间:2017-05-12 06:54:03

标签: sql sql-server join

如果没有找到SQL内部联接省略条件

假设我有一个SQL查询,如:

SELECT A.* FROM Table_A A
INNER JOIN Table_B B ON A.Field1 = B.Field1 AND A.Field2 = B.Field2
WHERE A.Field3 > 10

我想要实现的是,如果找不到只有Field1加入的数据,我们首先通过Field1 / Field2进行内部加入。

正确的方法是什么?

表A:

Id Field1 Field2 Field3
1  a      b      12
2  a      c      13
3  e      f      14
2  d      c      15

表B:

Id Field1 Field2
1  a      b      
2  e      g

结果应该是:

Id Field1 Field2 Field3
1  a      b      12
3  e      f      14 

4 个答案:

答案 0 :(得分:1)

工会的第一部分是你原来的。如果两组字段都不匹配,则第二部分仅在第一组字段上连接。

SELECT * FROM Table_A A
INNER JOIN Table_B B ON A.Field1 = B.Field1 AND A.Field2 = B.Field2
WHERE A.Field3 > 10

UNION

SELECT * FROM Table_A A
INNER JOIN Table_B B ON A.Field1 = B.Field1
WHERE A.Field3 > 10
  AND NOT EXISTS
     (SELECT 1 FROM TABLE_B B2
       WHERE A.Field1 = B2.Field1 AND A.Field2 = B2.Field2);

答案 1 :(得分:0)

您可以在同一个表上连接两次,一个使用内连接,另一个使用左连接,并将条件逻辑放在左连接上。

select distinct t1.*
from table1 t1
left join table2 t2 on t1.f2 = t2.f2
inner join table2 t3 on t1.f1 = t3.f1

答案 2 :(得分:0)

您可以在INNER JOIN中使用CASE。请检查一下:

declare @a table (col1 int, col2 int, col3 int)
declare @b table (col1 int, col2 int, col3 int)

Insert into @a values(1,1,11),(2,2,15),(3,4,20),(4,5,9)
Insert into @b values(1,1,5),(2,2,2),(3,3,20),(4,5,20)


select A.* from @a A inner join @b B on 
(CASE 
 WHEN  A.col2 = B.col2 then 1
 WHEN  A.col2 <> B.col2 then 1
 ELSE 1
END) = 1 and A.col1 = B.col1
where A.col3 > 10

答案 3 :(得分:0)

您可以尝试以下查询:

--release 8

演示链接:http://rextester.com/DKRG30176