回答

收藏

PostgreSQL从多个表中删除多行

技术问答 技术问答 264 人阅读 | 0 人回复 | 2023-09-14

考虑2个或更多表:
5 S2 S0 B6 p2 }5 Q. \0 V2 e4 pusers (id, firstname, lastname)% v3 r* I% s2 V0 f, Q) @
orders (orderid, userid, orderdate, total)
9 p5 d3 i( B1 r' R我希望删除所有与名字“ Sam ”匹配的 用户 及其 订单 。在mysql中,我通常会做左连接。在此示例中,我们不知道userid。
" @" a2 z- q6 m. J: \2 b8 l0 d: v6 a, G
查询的正确格式是什么?
' e7 H: R; i" Z' B  F3 p" V               
% j; _" U, v' z  R" a, L2 F解决方案:
2 ?) O- _- V) f  A7 U" [                . @( O$ E! _7 c& Z: U' N* b

' Q( X6 w+ ]' w/ q. S+ D! r
1 j6 M. o9 x/ I3 T% g8 a# F                http://www.postgresql.org/docs/current/static/sql-
, j/ I8 o! H  p: ^; Qdelete.html0 ]$ q4 A2 Z# d& d, x1 F  H* A; L
DELETE
; \: ~, r* {8 r+ UFROM orders o
3 [4 t0 k4 q3 D9 I5 W& aUSING users u( P& B5 s# f. E# v. B% T
WHERE o.userid = u.id" ^7 Q( {2 R. s6 P' q2 e
  and u.firstname = 'Sam';* G7 o9 i2 Q# M4 `" B6 s- e
DELETE
, ]' b( q& Q, G6 Y1 a/ ?4 [FROM users u
4 J% [3 Z* B( \1 V! tWHERE u.firstname = 'Sam';  F3 f& ?3 _9 G1 R& x# i
您也可以使用 ON delete cascade
6 u  G$ v% l3 c6 [http://www.postgresql.org/docs/current/static/ddl-2 V( Y3 K0 w& h7 E2 K& R  [
constraints.html. l1 [2 O1 a5 U' E- W% l8 y
CREATE TABLE order_items (& l+ z5 ^9 e( V7 Z& r- w
    product_no integer REFERENCES products ON DELETE RESTRICT,+ R& b  N! |$ T
    order_id integer REFERENCES orders ON DELETE CASCADE,
7 B. r; e4 }1 L& d    quantity integer,' b4 v+ ?" u- {1 N& I, [
    PRIMARY KEY (product_no, order_id)
, w; q  [% M# S. D);
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则