2015-11-13 40 views
1
刪除多行

考慮2個或多個表:PostgreSQL的從多個表

users (id, firstname, lastname) 
orders (orderid, userid, orderdate, total) 

我想刪除所有用戶他們訂單匹配名字「薩姆」這一點。在MySQL中,我通常會左連接。在這個例子中,userid對我們來說是未知的。

查詢的正確格式是什麼?

回答

4

http://www.postgresql.org/docs/current/static/sql-delete.html

DELETE 
FROM orders o 
USING users u 
WHERE o.userid = u.id 
    and u.firstname = 'Sam'; 

DELETE 
FROM users u 
WHERE u.firstname = 'Sam'; 

你也可以創建ON delete cascade

http://www.postgresql.org/docs/current/static/ddl-constraints.html

CREATE TABLE order_items (
    product_no integer REFERENCES products ON DELETE RESTRICT, 
    order_id integer REFERENCES orders ON DELETE CASCADE, 
    quantity integer, 
    PRIMARY KEY (product_no, order_id) 
); 
1

表定義userid作爲一個外鍵users (id)與級聯刪除,例如:

create table users (
    id int primary key, 
    firstname text, 
    lastname text); 

create table orders (
    orderid int primary key, 
    userid int references users (id) on delete cascade, 
    orderdate date, 
    total numeric); 

delete from users 
where firstname = 'Sam'; 
+0

非常感謝!這將對未來有所幫助 – fawzib