如果没有找到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
答案 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)