【问题标题】:Inserting into a table using the result of a MINUS subquery使用 MINUS 子查询的结果插入表中
【发布时间】:2017-10-29 13:44:43
【问题描述】:

我正在尝试从 ORACLE 上的两个表(示例数据)中插入 MINUS 值。我可以插入所有行,但我不能让它与另一个表中缺少的行一起工作:

样本数据:

SALES TABLE           SALES2 TABLE           S_DETAILS TABLE               
===================   ===================    ==================
ID_SALE|DATE_SALE     ID_SALE|DATE_SALE      ID_SALE|SALE_DETAILS
100    |12/12/2010    100    |12/12/2010     100    |SHIPPED
101    |5/10/2011     101    |5/10/2011      101    |WAITING
102    |10/9/2012                            102    |SHIPPED
103    |5/10/2011                            103    |PROCESSING

我的代码:

INSERT INTO SALES_RESUME(ID_SALE,DATE_SALE,TOTAL_SALE,SALE_DETAILS)
SELECT A.ID_SALE,A.DATE_SALE,B.TOTAL_SALE,B.SALE_DETAILS
FROM SALES A
     JOIN S_DETAILS B ON A.ID_SALE = B.ID_SALE
WHERE A.ID_SALE IN (SELECT ID_SALE FROM SALES
                    MINUS
                    SELECT ID_SALE FROM SALES2);

当 ID_SALE 在生成的 MINUS 子查询中时,我想在 SALES_RESUME 中插入行,插入:

SALES_RESUME          
==============================
ID_SALE|DATE_SALE|SALE_DETAILS
102    |10/9/2012|SHIPPED
103    |5/10/2011|PROCESSING

提前致谢

【问题讨论】:

  • 您的查询似乎符合您的要求。有什么问题?
  • a看到sales_resume的日期为10/9/1012,是不是弄错了?
  • 好吧,要么您在 Oracle 中发现了一个可怕但非常明显的错误(可能,但不太可能),或者这里的某些东西与您预期的不一样。让我们一步一步来。首先,如果执行SELECT ID_SALE FROM SALES MINUS SELECT ID_SALE FROM SALES2,返回多少行?第二,如果执行SELECT A.ID_SALE, A.DATE_SALE, B.TOTAL_SALE, B.SALE_DETAILS FROM SALES A JOIN S_DETAILS B ON A.ID_SALE = B.ID_SALE,返回多少行?

标签: sql oracle insert subquery


【解决方案1】:

您的查询似乎符合您的要求。但是为什么不直接写这个呢?

WHERE A.ID_SALE NOT IN (SELECT ID_SALE FROM SALES2 WHERE ID_SALE IS NOT NULL);  -- assuming SALES2.ID_SALE is never NULL

您已经知道ID_SALE 在第一个表中。

【讨论】:

  • 我以前尝试过这种方式,现在我重试并继续插入 0 行:(
  • @Rycerzfrost 。 . .添加WHERE 子句过滤掉NULL 值。
  • 仍然没有用,我开始认为可能是表的基数和引用搞砸了
  • @Rycerzfrost 我认为 S_DETAILS 是一个包含代码和 sales_name 的查找表。即与持有total_sale 无关,不是吗?
【解决方案2】:

如果我知道了,我认为这个查询会起作用

SELECT A.ID_SALE,A.DATE_SALE,B.TOTAL_SALE,B.SALE_DETAILS
  FROM ((select id_sale,DATE_SALE from SALES) minus (select id_sale,DATE_SALE from SALES2)) A 
       JOIN S_DETAILS B on A.id = B.id 

【讨论】:

    猜你喜欢
    • 2023-02-04
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    相关资源
    最近更新 更多