这似乎是一个基本问题,但是我遇到了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条件(另一个主键)似乎已解决该问题。
再次感谢您的所有帮助!
答案 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上。
例如:有骑马者和马匹。我们有兴趣认识没有马的骑马者。如果至少有一匹马(不是他的话),您所做的事情类似于寻找骑手。如果每个骑手至少有这样一匹马,那么所有骑手都将被视为没有马,无论他们是否有马。