我有幾個表,我們假設三個表+用戶表。使用LEFT OUTER加入找到多個表的字段提示MYSQL
所有表都有一個稱爲電子郵件和分數字段的外鍵。
用戶:
id email
1 [email protected]
2 [email protected]
T1:
id email score
1 [email protected] 2
2 [email protected] 7
3 [email protected] 8
4 [email protected] 3
T2:
id email score
1 [email protected] 4
噸3:
id email score
1 [email protected] 5
我想從三個表中找到每個用戶分數的總和, 例如:
email S1 S2 S3 Summation
[email protected] 4 17 0 21
這是我的SQL:
SELECT u.email as uEmail ,sum (a.score) as S1,sum(w.score) as S2,sum(boo.score) as S3,
sum(a.score + w.score + boo.score) as Summition
FROM user u
LEFT OUTER Join t1 a On u.email= a.email
LEFT OUTER Join t2 w On u.email=w.email
LEFT OUTER Join t3 boo On u.email=boo.email group by uEmail ;
我用S2取得錯誤值,因爲它應該只有4個:
uEmail S1 S2 S3 Summition
[email protected] 17 12
[email protected] 3 5
我找到了原因,當我被刪除組:
SELECT u.email as uEmail ,(a.score) as S1,(w.score) as S2,(boo.score) as S3,
(a.score + w.score + boo.score) as Summition
FROM user u
LEFT OUTER Join t1 a On u.email= a.email
LEFT OUTER Join t2 w On u.email=w.email
LEFT OUTER Join t3 boo On u.email=boo.email ;
分數的值的值重複每次:
uEmail S1 S2 S3 Summition
[email protected] 2 4
[email protected] 7 4
[email protected] 8 4
[email protected] 3 5
首先,使用電子郵件作爲外鍵是一個非常糟糕的主意。您應該使用用戶表中的id列。你的查詢應該在用戶的表上,子選擇從每個表中收集得分。 –
是的,我應該用id來代替,我會盡量做出子選擇。謝謝 – khorshid
謝謝,它的工作! – khorshid