2015-10-07 66 views
0

我有什麼是幾桌......他們兩個是:如何執行從完整外連接中刪除表條目?

CREATE TABLE Orders(
oid int NOT NULL, 
rdate date, 
sdate date, 
cid int NOT NULL, 
eid int NOT NULL, 
PRIMARY KEY (oid), 
FOREIGN KEY (cid) REFERENCES Customer(cid), 
FOREIGN KEY (eid) REFERENCES Employee(eid)); 

CREATE TABLE PartOrder(
poid int NOT NULL, 
pid int NOT NULL, 
oid int NOT NULL, 
PRIMARY KEY (poid), 
FOREIGN KEY (pid) REFERENCES Part(pid), 
FOREIGN KEY (oid) REFERENCES Orders(oid)); 

我需要做的是這樣的:

Create and execute a query that deletes all PartOrder records for Orders for which the shipping date is in the past.

所以,我想出了這個...

DELETE 
FROM (SELECT * FROM PartOrder FULL OUTER JOIN Orders ON partorder.oid=orders.oid) 
WHERE sdate<sysdate; 

這是給我這個錯誤:

ORA-01752: cannot delete from view without exactly one key-preserved table

有人可以給我一些見解?

+0

我明白了!刪除了「FULL OUTER JOIN」,並替換爲「JOIN」。 –

+0

如果問題解決了,請繼續併發布您找到答案並暫時接受它,如果有更好的解決方案出現,您可以隨時更改接受的答案。 – bgse

+0

'完全外部連接'和'連接'具有不同的行爲。你知道你爲什麼試圖首先使用「全外連接」嗎? – sstan

回答

0

我寫這篇文章,就像這樣

DELETE FROM PARTORDER 
    WHERE POID IN (SELECT p.POID 
        FROM PARTORDER p 
        INNER JOIN ORDERS o 
        ON o.OID = p.OID 
        WHERE o.SDATE < SYSDATE); 

好運。