使用SQL JOIN获取意外数据

时间:2019-06-23 06:39:37

标签: sql join

这似乎是一个基本问题,但是我遇到了SQL问题。我有两个表,YesterdayData_ListSubscribers。它们每个都有一个Primary Key共同点以加入SubscriberKey。但是,我只想返回YesterdayData中数据与_ListSubscribers不匹配的行(而不返回_ListSubscribers中不存在的YesterdayData中的行)。

这是我到目前为止的内容,但是它返回的行比预期的多:

SELECT DISTINCT
y.ListName,
y.Status,
y.ListID,
y.SubscriberKey,
y.AddMethod
FROM _Listsubscribers l
LEFT JOIN YesterdayData y
ON y.subscriberkey = l.subscriberkey
WHERE l.Status != y.Status

非常感谢! 格雷格

更新-谢谢大家的帮助。我相信这可以解决问题:

SELECT
l.ListName,
l.Status,
l.ListID,
l.SubscriberKey,
l.AddMethod
FROM _Listsubscribers l
LEFT JOIN YesterdayData y
ON y.subscriberkey = l.subscriberkey
WHERE l.Status != y.Status
AND y.ListID = l.ListID

添加ListID条件(另一个主键)似乎已解决该问题。

再次感谢您的所有帮助!

4 个答案:

答案 0 :(得分:0)

尝试一下

Select 
y.ListName,
y.Status,
y.ListID,
y.SubscriberKey,
y.AddMethod 
From _Listsubscribers l 
Right Join YesterdayData y 
ON y.subscriberkey = l.subscriberkey 
WHERE l.Status != y.Status

答案 1 :(得分:0)

尝试内部联接

SELECT DISTINCT
y.ListName,
y.Status,
y.ListID,
y.SubscriberKey,
y.AddMethod
FROM _Listsubscribers l
INNER JOIN YesterdayData y
ON y.subscriberkey = l.subscriberkey AND l.Status != y.Status

答案 2 :(得分:0)

您完全加入即可获得所需的结果,如下所示-

SELECT DISTINCT
y.ListName,
y.Status,
y.ListID,
y.SubscriberKey,
y.AddMethod
FROM _Listsubscribers l
FULL JOIN YesterdayData y
ON y.subscriberkey = l.subscriberkey
WHERE y.subscriberkey IS NULL OR  l.subscriberkey IS NULL

答案 3 :(得分:0)

您正在搜索await,即确实存在任何_Listsubscribers与其他YesterdayData不同的Status项目。您将需要在YesterdayData _Listsubscribers中找到与table不匹配的记录:

SELECT DISTINCT
y.ListName,
y.Status,
y.ListID,
y.SubscriberKey,
y.AddMethod
FROM _Listsubscribers l
LEFT JOIN YesterdayData y
ON y.subscriberkey = l.subscriberkey
WHERE l.Status != y.Status

尝试这种方式:

select y.ListName, y.Status, y.ListID, y.SubscriberKey, y.AddMethod
from YesterdayData y
where not exists (select 1 from _Listsubscribers l where l.Status = y.Status)

说明:如果您有A和B集,其中至少有一条B记录与给定的A记录不匹配,则结果A的给定记录将出现在结果中,无论它是否匹配是否在B上。

例如:有骑马者和马匹。我们有兴趣认识没有马的骑马者。如果至少有一匹马(不是他的话),您所做的事情类似于寻找骑手。如果每个骑手至少有这样一匹马,那么所有骑手都将被视为没有马,无论他们是否有马。