[英]SQL Server - Return all records from LEFT table and only non matching records from right table
I have 2 tables with the same structure (field names). 我有2个具有相同结构(表名)的表。 Table1 and Table2.
表1和表2。
I need to return all records from Table1 and only records from Table2 that do not match/join to a record in Table1. 我需要返回表1中的所有记录,并且仅返回表2中与表1中的记录不匹配/联接的记录。
Table2 has more records than Table1. 表2比表1具有更多的记录。
I am joining the 2 tables on 3 fields. 我将加入3个字段中的2个表。
So basically I want all records from table1 returned and only records that don't have a match (joining on the 3 fields) to table1 from table2 returned. 因此,基本上我希望返回table1的所有记录,并且只返回与table2的table1不匹配(在3个字段上连接)的记录。
Put another way, Table1 records take precedence over table2 records in my final result output when the records exist in both tables (same value for the 3 fields) 换句话说,当两个表中都存在记录时,表1记录的优先级高于最终结果输出中的表2记录(3个字段的值相同)
I started writing something like the below but I don't think it will work. 我开始写类似下面的内容,但我认为它不起作用。 Should I use a left outer join instead?
我应该改用左外部联接吗?
Select * from table1 t1
left join table2 t2 on t1.id = t2.id and t1.date = t2.date and t1.custid= t2.custid
where t2.id is null or t2.date is null or t2.custid is null
So, you need every row from table1
plus the rows from table2
that don't match with table1
?: 因此,您需要
table1
每一行以及table2
中与table1
不匹配的行?
SELECT *
FROM table1
UNION ALL
SELECT *
FROM table2 t2
WHERE NOT EXISTS(SELECT * FROM table1
WHERE id = t2.id
AND date = t2.date
AND custid = t2.custid);
Select * from table1 t1
Union
Select * from table2 t2
Where Not exists
(Select * from table1
Where id = t1.id
and date = t1.date
and custid= t1.custid)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.