假设我有两个表A
和B
,它们具有相似的cust_id
列。我正在尝试检索cust_id
与A
和B
相等但具有不同电子邮件地址的所有行。
我现在拥有以下内容:
SELECT
A.cust_id,
A.email_addr,
B.preferred_email
FROM
email_feature A
LEFT OUTER JOIN email_feature_sum B ON
(
A.cust_id = B.cust_id
AND
A.email_addr != B.preferred_email
)
ORDER BY
A.date_loaded DESC
但它没有返回任何结果,我不确定我做错了什么?
答案 0 :(得分:1)
结果集的排序可能会让你失望。如果您定期join
怎么办?
SELECT ef.cust_id, ef.email_addr, efs.preferred_email
FROM email_feature ef JOIN
email_feature_sum efs ON
ON ef.cust_id = efs.cust_id and
ef.email_addr <> efs.preferred_email
ORDER BY ef.date_loaded desc;
答案 1 :(得分:1)
在回应上述OP的评论时,我认为A.cust_id需要修剪前导零。这可以通过以下方式实现:
如果B.cust_id是数字格式,您可能还必须将其强制转换为字符串才能进行比较。我已经在连接中包含了这个,但是如果不需要它,因为B.cust_id已经是一个char类型,你可以删除转换,它会更有效。
SELECT
A.cust_id,
A.email_addr,
B.preferred_email
FROM
email_feature A
LEFT OUTER JOIN email_feature_sum B ON
(
ltrim(A.cust_id, '0') = to_char(B.cust_id)
AND
A.email_addr != B.preferred_email
)
ORDER BY
A.date_loaded DESC
答案 2 :(得分:0)
我认为你的数据不符合条件。我一直在测试,它运行成功。
with email_feature as(
select 1 cust_id,'hvv@gmail.com' email_addr from dual
),
email_feature_sum as(
select 1 cust_id,'hvv@gmail2.com' preferred_email from dual
)
SELECT
A.cust_id,
A.email_addr,
B.preferred_email
FROM
email_feature A
LEFT OUTER JOIN email_feature_sum B ON
(
A.cust_id = B.cust_id
AND
A.email_addr != B.preferred_email
)