日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

mysql支不支持fulljoin_mysql不支持full join的另一种解决办法 和根据多个表中的相同分组来连接查询...

發(fā)布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql支不支持fulljoin_mysql不支持full join的另一种解决办法 和根据多个表中的相同分组来连接查询... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先看兩張表:

1. user表:

2. animal表:

現(xiàn)在我想要查詢各省市區(qū)對應(yīng)的人名和動物名,即根據(jù)省市區(qū)來連接兩張表。

考慮到user表中有的省市區(qū)可能在animal表中沒有,animal表中有的省市區(qū)user表中可能沒有,所以兩張表需要全連接。

但是mysql本身不支持全連接,除了用union連接左連接查詢和右連接查詢外,現(xiàn)提供另外一種有效的解決方案。

1) 根據(jù)兩表的省市區(qū)建立視圖,視圖中省市區(qū)組合不重復(fù):

create view v as

SELECT u.province_id,u.city_id,u.district_id from useruunion

SELECT a.province_id,a.city_id,a.district_id from animal a

建好的視圖:

2)這樣視圖中就有了全部的不重復(fù)的省市區(qū)組合,然后user表和animal表和這個視圖根據(jù)省市區(qū)條件左連接即可:

SELECTv.province_id,

v.city_id,

v.district_id,

u.`name`,

u.money,

a.`name`,

a.amountFROMvLEFT JOIN USER u ON v.province_id =u.province_idAND v.city_id =u.city_idAND v.district_id =u.district_idLEFT JOIN animal a ON v.province_id =a.province_idAND v.city_id =a.city_idAND v.district_id = a.district_id

查詢出來的結(jié)果:

到此 查詢各省市區(qū)對應(yīng)的人名和動物名?完成。

現(xiàn)在我想查詢各省市區(qū)對應(yīng)的錢數(shù)(money_sum)和動物數(shù)(amount_sum):

sql如下:

SELECTv.province_id,

v.city_id,

v.district_id,

u.money_sum,

a.amount_sumFROMvLEFT JOIN(SELECTu.province_id,

u.city_id,

u.district_id,sum(u.money) 'money_sum' --分組統(tǒng)計值

FROM

USERuGROUP BYu.province_id,

u.city_id,

u.district_id

) uON v.province_id =u.province_idAND v.city_id =u.city_idAND v.district_id =u.district_idLEFT JOIN(SELECTa.province_id,

a.city_id,

a.district_id,sum(a.amount) 'amount_sum' --分組統(tǒng)計值

FROManimal aGROUP BYa.province_id,

a.city_id,

a.district_id

) aON v.province_id =a.province_idAND v.city_id =a.city_idAND v.district_id =a.district_id--注:1. 視圖存放所有不重復(fù)的分組情況 2. 必須先統(tǒng)計再連接,即:先求出 分組統(tǒng)計值,然后再左連接;如果先左連接再求統(tǒng)計值,統(tǒng)計值會比實際值大,因為左連接后數(shù)據(jù)有重復(fù)

查詢出來的結(jié)果:

可以驗證一下查詢結(jié)果是否正確:

money_sum一列的和為15,user表中所有money的和也為15。

amount_sum一列的和為28,animal表中所有的amount值的和也為28。

總結(jié):

mysql求全連接,可以先創(chuàng)建所有連接條件的并集,然后其他表都和這個并集進行左連接,即可得出全連接。

附:通常的解決方案(適用于語句較少時)

MySQL Full Join的實現(xiàn) 因為MySQL不支持FULL JOIN,下面是替代方法

left join + union(可去除重復(fù)數(shù)據(jù))+ right join

兩張表時:

select*fromAleftjoinBonA.id=B.id (where 條件)

union

select*fromArightjoinBonA.id =B.id (where條件);

總結(jié)

以上是生活随笔為你收集整理的mysql支不支持fulljoin_mysql不支持full join的另一种解决办法 和根据多个表中的相同分组来连接查询...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。