插入不存在相应记录的记录

时间:2018-06-14 14:10:05

标签: sql oracle

我有TBLISSUES包含以下数据: -

ISSUEID QUOTEID ISSUE_TYPE  DATE_ADDED  DATE_RESOLVED   RESOLVED_BY RESOLVED
4312    989435  TPIUplift   14-Jun-18                               N
4316    989077  TPIUplift   14-Jun-18                               N
4333    989071  TPIUplift   14-Jun-18                               N
4324    988403  TPIUplift   14-Jun-18   14-Jun-18       JohnSmith   Y
4323    988402  TPIUplift   14-Jun-18                               N
4317    987964  TPIUplift   14-Jun-18                               N

和这个脚本: -

INSERT INTO tblissues (
    quoteid,
    issue_type,
    date_added,
    resolved
)
    SELECT
        *
    FROM
        (
            SELECT
                q.quoteid,
                'TPIUplift',
                trunc(SYSDATE) newissuedate,
                'N'
            FROM
                tblquotesnew q
                LEFT JOIN tbltariffsnew t ON q.tariff_id = t.tariffid
            WHERE
                t.uplift = 0
                AND   q.sales_route = 'TPI'
                AND   q.quote_status = 'Accepted'
                AND   q.status <> 'Cancelled'
        ) x

脚本查找问题(始终存在)。我想要添加一条新记录,只有现有的已解决记录不存在。

我尝试在插入的where子句中使用它,但仍然添加了一行

  WHERE
        NOT EXISTS (
            SELECT
                *
            FROM
                tblissues
            WHERE
                (x.quoteid = tblissues.quoteid
                AND   tblissues.issue_type = 'TPIUplift'
                AND   tblissues.resolved <> 'Y')

因此,使用上面的示例数据,我不希望为QUOTEID 988403插入一行,因为它的RESOLVED值为Y.

这可能吗?

1 个答案:

答案 0 :(得分:1)

  

我不想为QUOTEID 988403插入一行,因为它已被解决   价值是Y。

考虑到这一点,以及您的QUOTEID不同,但ISSUE_TYPE对所有记录都相同,那么您是不是只想使用它?

  WHERE NOT EXISTS 
  ..
  ..
        (
          WHERE   tblissues.ISSUE_TYPE = x.ISSUE_TYPE
           AND    tblissues.resolved   = 'Y' )

如果没有,请更新您的问题,并为预期的输出添加更多行,并清楚地解释您想要的内容。