中国无敌改装网(postgres中执行DELETE … LEFT)
用户投稿
•
•
阅读 279
中国无敌改装网 问题:有两张表 users, addrs,需要从users表中删除一些行,条件为在“addrs”表中没有对应id的行。

table-users

table-addrs
事实上很简单,只是个left join查询,SELECT a.*,'|' s,b.* FROM users a LEFT JOIN addrs b ON a.id=b.id;,预览如下:

overview-join
然而,postgres本身不支持 DELETE … LEFT JOIN … 这样的语句,这点不像MySQL那样方便。
有一个曲线救国方法:
把上面LEFT JOIN的结果表视为一张中间表,把原users表、按主键 inner join 到中中间表,然后从users表中按删除指定行。语句如下
DELETE FROM users USING users a LEFT JOIN addrs b ON a.id=b.id WHERE users.id=a.id AND b.name IS NULL;
问题得解。
当然也可以使用子查询,从中间表中取出id主键,以子查询形式删除。不推荐。
前文用表及数据
CREATE TABLE users (
id integer NOT NULL GENERATED BY DEFAULT AS IDENTITY,
name character varying(255)
);
ALTER TABLE users ADD CONSTRAINT users_pkey PRIMARY KEY (id);
CREATE TABLE addrs (
id integer NOT NULL GENERATED BY DEFAULT AS IDENTITY,
addr character varying(255)
);
ALTER TABLE addrs ADD CONSTRAINT addrs_pkey PRIMARY KEY (id);
INSERT INTO "users" VALUES (1, 'Tom');
INSERT INTO "users" VALUES (2, 'Jarry');
INSERT INTO "users" VALUES (3, 'Alias');
INSERT INTO "users" VALUES (4, 'Bob');
INSERT INTO "users" VALUES (5, 'somebody');
INSERT INTO "addrs" VALUES (1, 'Luoyang');
INSERT INTO "addrs" VALUES (2, 'Shanghai');
INSERT INTO "addrs" VALUES (3, 'Hongkong');
EOF.
随机文章
SEO教程站长导航
搜素引擎算法
关键词排名优化
SEO教程
友情链接交换
搜素引擎算法
关键词排名优化
百度搜索“网赚联盟”即可找到本站,微信搜索“小小课堂网”关注小小课堂网公众号。网赚联盟( wangzhuan.org.cn )欢迎用户投稿,发布者:用户投稿,文章版权归作者所有,投稿文章不代表网赚联盟立场,中二少年发布为网赚联盟原创文章,转载请注明出处:https://wangzhuan.org.cn/228630.html

微信扫一扫
支付宝扫一扫