sql連接查詢存在結果集重複

  • sql連接查詢包括:inner join、left join、right join和full join。
  • 連接查詢有時作爲中間視圖處理結果的語句,會由於數據集重複導致最終的數據統計結果不正確。
  • 解決:必須確保連接條件的唯一性
  • 參考:https://www.cnblogs.com/lijingran/p/9001302.html

前置數據準備

  • 商品表(goods)
    在這裏插入圖片描述
  • 類別表(sort)
    在這裏插入圖片描述

連接條件不唯一,導致結果集數據可能發生重複,導致結果不正確

  • inner join:保留兩張表中匹配的結果集
select * from goods g 
inner join sort s 
on 
g.sortcode = s.scode;

在這裏插入圖片描述

  • left join: 保留左表所有的行,即使右表沒有匹配的記錄
select * from goods g 
left join sort s 
on 
g.sortcode = s.scode;

在這裏插入圖片描述

  • right join:保留右表所有的行,即使右表沒有匹配的記錄
select * from goods g 
right join sort s 
on 
g.sortcode = s.scode;

在這裏插入圖片描述

  • full join:返回包括左右表中不匹配的記錄
select * from goods g 
full join sort s 
on 
g.sortcode = s.scode;

在這裏插入圖片描述

連接條件唯一時

  • inner join
select * from goods g 
inner join sort s 
on 
g.sortcode = s.scode
and 
g.sortname = s.sname;

在這裏插入圖片描述

  • left join
select * from goods g 
left join sort s 
on 
g.sortcode = s.scode
and 
g.sortname = s.sname;

在這裏插入圖片描述

  • right join
select * from goods g 
right join sort s 
on 
g.sortcode = s.scode
and 
g.sortname = s.sname;

在這裏插入圖片描述

  • full join
select * from goods g 
full join sort s 
on 
g.sortcode = s.scode
and 
g.sortname = s.sname;

在這裏插入圖片描述

  • sql腳本
CREATE TABLE goods (
	gid varchar(32) NOT NULL,
	gcode varchar(30) NOT NULL,
	gname varchar(100) NOT NULL,
	price numeric(20, 4) NOT NULL,
	sortcode varchar(30) NOT NULL,
	sortname varchar(100) NOT NULL,
	PRIMARY KEY (gid)
);

CREATE TABLE sort (
	sid varchar(32) NOT NULL,
	scode varchar(30) NOT NULL,
	sname varchar(100) NOT NULL,
	PRIMARY KEY (sid)
);

INSERT INTO "public"."goods"("gid", "gcode", "gname", "price", "sortcode", "sortname") VALUES ('g0001', '0001', '康師傅可口可樂', '3.0000', '100002', '碳酸飲料A');
INSERT INTO "public"."goods"("gid", "gcode", "gname", "price", "sortcode", "sortname") VALUES ('g0002', '0002', '百世可樂', '4.0000', '100002', '碳酸飲料B');
INSERT INTO "public"."goods"("gid", "gcode", "gname", "price", "sortcode", "sortname") VALUES ('g0003', '0003', '酸奶', '2.0000', '100001', '牛奶');
INSERT INTO "public"."goods"("gid", "gcode", "gname", "price", "sortcode", "sortname") VALUES ('g0004', '0004', '雪碧', '3.5000', '100003', '碳酸飲料C');

INSERT INTO "public"."sort"("sid", "scode", "sname") VALUES ('s001', '100001', '牛奶');
INSERT INTO "public"."sort"("sid", "scode", "sname") VALUES ('s002', '100002', '碳酸飲料A');
INSERT INTO "public"."sort"("sid", "scode", "sname") VALUES ('s003', '100002', '碳酸飲料B');
INSERT INTO "public"."sort"("sid", "scode", "sname") VALUES ('s005', '200005', '麪食');



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章