使用MINUS子查询的结果插入表中
我试图在ORACLE上插入两个表(示例数据)的MINUS值。我可以插入所有的行,但我不能让它与缺少在其他表中的行工作:使用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
在此先感谢
您的查询似乎会做你想做的。但为什么不写这个?
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
@Rycerzfrost ...。添加'WHERE'子句筛选出NULL值 –
仍然没有工作,我开始思考这可能是表的基数和引用正在搞点东西 – Rycerzfrost
如果我得到了它,我觉得这个查询将工作
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
您的查询就会出现你想要做什么。什么是问题? –
a查看'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',返回多少行? –