【问题标题】:JOIN TABLE IN ORACLE在 Oracle 中加入表
【发布时间】:2017-08-05 22:25:38
【问题描述】:

我有一个包含 100000 条记录的表,我得到了 97000 条记录,这是下面查询如何获取剩余 30000 条记录的一部分。我试过不等于'H.RESOURCE_ID <> SQ.CPNT_OG_ID',但没有得到正确的数据?

SELECT H.pernr AS "STUD_ID",
       SQ.CPNT_TYP_ID,
       SQ.CPNT_ID,
       TO_CHAR (SQ.REV_DTE, 'MON-DD-YYYY HH24:MI:SS') AS REV_DTE,
       CASE                                                           --WAIVED
          WHEN sq.CPNT_TYP_ID = 'VIDEO' AND enrollment_status = 'Complete'
          THEN
             'VIDEO-COMPLETE'
          WHEN sq.CPNT_TYP_ID = 'VIDEO' AND enrollment_status <> 'Complete'
          THEN
             'VIDEO-WAIVED'
          WHEN     sq.CPNT_TYP_ID = 'CERTIFICATION'
               AND enrollment_status = 'Complete'
          THEN
             'CERT-COMPLETE'
          WHEN     sq.CPNT_TYP_ID = 'CERTIFICATION'
               AND enrollment_status <> 'Complete'
          THEN
             'CERT-WAIVED'
          WHEN sq.CPNT_TYP_ID = 'CDOC' AND enrollment_status = 'Complete'
          THEN
             'CDOC-COMPLETE'
          WHEN sq.CPNT_TYP_ID = 'CDOC' AND enrollment_status <> 'Complete'
          THEN
             'CDOC-WAIVED'
          WHEN     sq.CPNT_TYP_ID = 'ELEARNING'
               AND enrollment_status = 'Complete'
          THEN
             'Elearning-COMPLETE-PASSED'
          WHEN     sq.CPNT_TYP_ID = 'ELEARNING'
               AND enrollment_status <> 'Complete'
          THEN
             'Elearning-WAIVED'
          ELSE
             NULL
       END
          "CMPL_STAT_ID",
       TO_CHAR (H.COMPLETION_DATE, 'MON-DD-YYYY HH24:MI:SS')
          AS COMPLETION_DATE,
       'RECORD_Admin'
          AS "ESIG_MEANING_CODE_ID",
       NULL                                           AS "LST_UPD_USR",
       sq.rev_num                                     AS "REV_NUM",
       'LEARNSHARE'                                   AS "COMMENTS"
  FROM ZB_USR_HISTORY_NEW H
       JOIN
       (SELECT DISTINCT CPNT_ID,
                        CPNT_TYP_ID,
                        CPNT_OG_ID,
                        REV_DTE,
                        REV_NUM,
                        CPNT_COURSE_NUM
          FROM TBL_ZIM_ITEM_new
         WHERE VALID = '1' AND app_id LIKE '%en-us%' OR LENGTH (app_id) < 9)
       SQ
          ON (H.RESOURCE_ID = SQ.CPNT_OG_ID);

【问题讨论】:

  • 你试过left join吗?
  • 最简单的方法是从“丢失”的 3000 条记录中取出并检查 TBL_ZIM_ITEM_new 表中是否有 RESOURCE_ID 的记录。如果确实检查了该行的 VALID 和 APP_ID 字段。您的加入条件非常简单,应该是一项快速、简单的任务。

标签: sql oracle join oracle11g


【解决方案1】:

只需将 JOIN 替换为 LEFT JOIN。您可以在 SQL 中使用 LEFT JOIN 或 RIGHT JOIN 来获取不满足连接条件的记录。在不存在的行中选择的列将为 NULL。

【讨论】:

  • 如果我使用 LEFT OR RIGHT 连接,我会获得超过 3000 条记录
  • @Bonniest HI 你能找到什么吗?
猜你喜欢
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多