mysql支不支持fulljoin_mysql不支持full join的另一种解决办法 和根据多个表中的相同分组来连接查询...
先看兩張表:
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java查询mysql装载bean_js
- 下一篇: mysql timestamp 更新_[