2015-10-07 67 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); 

好运。