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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

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

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

先看兩張表:

1. user表:

2. animal表:

現在我想要查詢各省市區對應的人名和動物名,即根據省市區來連接兩張表。

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

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

1) 根據兩表的省市區建立視圖,視圖中省市區組合不重復:

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)這樣視圖中就有了全部的不重復的省市區組合,然后user表和animal表和這個視圖根據省市區條件左連接即可:

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

查詢出來的結果:

到此 查詢各省市區對應的人名和動物名?完成。

現在我想查詢各省市區對應的錢數(money_sum)和動物數(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' --分組統計值

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' --分組統計值

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. 視圖存放所有不重復的分組情況 2. 必須先統計再連接,即:先求出 分組統計值,然后再左連接;如果先左連接再求統計值,統計值會比實際值大,因為左連接后數據有重復

查詢出來的結果:

可以驗證一下查詢結果是否正確:

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

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

總結:

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

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

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

left join + union(可去除重復數據)+ right join

兩張表時:

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

union

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。