查询条件的两个表(Oracle)

时间:2017-08-17 00:31:04

标签: sql oracle

假设我有两个表AB,它们具有相似的cust_id列。我正在尝试检索cust_idAB相等但具有不同电子邮件地址的所有行。

我现在拥有以下内容:

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 

但它没有返回任何结果,我不确定我做错了什么?

3 个答案:

答案 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
        )