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的另一种解决办法 和根据多个表中的相同分组来连接查询...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java查询mysql装载bean_js
- 下一篇: 听说视库网的高清视频素材都是原创,是真的