加入两个表并需要返回具有相同ID但标准不同的结果

时间:2014-04-23 10:54:06

标签: sql

由于缺乏SQL知识,我现在非常困难!

我有两张表符合以下条件:

Table1

UPC  
Country

Table2

UPC  
Country

我需要查看表1中的所有行以及表2中的相应UPC以及表2中缺少的国家/地区。

例如:

UPC1    |Country1   |UPC2   |Country2  
12345   |UK     |12345  |UK  
12345   |IE     |12345  |IE
12345   |DE     |NULL   |NULL
12345   |FR     |12345  |FR

我尝试过以下代码:

select *
from CPRSLRScheduled cprs join R2LRDig r2
    on cprs.UPC = r2.upc
where cprs.country_iso_code not in (r2.country_id)

我知道这是一个真正的初学者'问题,但我真的需要帮助!

3 个答案:

答案 0 :(得分:0)

select t1.upc,t1.country,t2.upc,t2.country 
from table1 t1 inner join table2 t2 
on t1.upc=t2.upc where t2.country IS NULL

答案 1 :(得分:0)

我想你想要一个left outer join

select *
from CPRSLRScheduled cprs left outer join
     R2LRDig r2
     on cprs.UPC = r2.upc and
        cprs.country_iso_code = r2.country_id
where r2.upc is NULL;

这将获取计划表中的所有行,并尝试根据upc和国家/地区代码在另一个表中查找匹配项。如果没有匹配,则仍保留该行,但第二个表的值为NULL值。因此,最后的where子句选择的是第一个表中的值,而不是第二个表中的值。

答案 2 :(得分:0)

使用外部联接。以下语句为您提供表1的所有记录和表2的匹配。如果未找到匹配项,则会获得NULL值:

select *
from CPRSLRScheduled cprs 
left outer join R2LRDig r2 on cprs.UPC = r2.upc and cprs.country_iso_code = r2.country_id