2017-10-28 254 views
0

我試圖在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 

在此先感謝

+0

您的查詢就會出現你想要做什麼。什麼是問題? –

+0

a查看'10/9/1012'的銷售日期的日期,是否被誤認爲? –

+0

好吧,無論你在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',返回多少行? –

回答

0

您的查詢似乎會做你想做的。但爲什麼不寫這個?

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

我已經嘗試過這種方式,現在我重試並繼續插入0行:( – Rycerzfrost

+0

@Rycerzfrost ...。添加'WHERE'子句篩選出NULL值 –

+0

仍然沒有工作,我開始思考這可能是表的基數和引用正在搞點東西 – Rycerzfrost

0

如果我得到了它,我覺得這個查詢將工作

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