笛卡爾積現象解決

2022-08-16 22:36:15 字數 712 閱讀 4458

今天使用join...on進行多表連線查詢,使用的各個表中的id進行關聯,但是資料是不對的,出現了笛卡爾積現象。

使用join相當於將表中資料進行了相乘,兩個表中的資料相當於a表中字段個數乘以b表中字段個數。

查了相關帖子,使用join...on內連線就能解決,但是資料還是不對。

連線查詢,如果on條件是非唯一字段,會出現笛卡爾積;如果on 條件是表的唯一字段,則不會出現笛卡爾積。

解決辦法是:使用唯一字段進行等值連線。

select ft.ctime ctime,ft.images images,cm.id cid from

(select

five.cname cname,five.ctime ctime ,five.images images

from

a a

where a.pid=# and a.fname=# and a.lname=# and a.rname=# and a.aname=

#) ft

join camr cm on ft.cname=cm.cname

之前用的三個表的id 進行連線,出現了笛卡爾積。後來取巧用了名字進行連線才消除笛卡爾積現象。

引用:在實際應用過程中通過關聯表的最小粒度關聯,可以避免產生笛卡爾積。這裡的最小粒度可以理解為表中的唯一性約束的字段值.

笛卡爾積現象

2.3 當兩張表進行連線查詢時,沒有任何條件的限制會發生什麼現象?案例 查詢每個員工所在部門名稱?select from emp select ename,dname from emp,dept 當兩張表進行連線查詢,沒有任何條件限制時,最終查詢結果條數,是兩張表條數的乘積 2.4 怎麼避免笛卡爾積...

避免笛卡爾積現象方式一

1 主要sql語句 select from select row rownum rownum from select matnr,maktx,lgort,lgobe,charg,labst,meins,matkl,wgbez,brgew,mtart,gewei,menge as qty,holdqt...

避免笛卡爾積

在mysql中建立臨時表 create table temptable 2 instanceid numeric 30 celltype varchar 128 enodeb id numeric 30 eutrancell id numeric 30 engine myisam default c...