2017-11-20 13 views
0

私は非常に複雑なクエリの要件を持っている、そして今私は単にデモとして2つのテーブルを使用します。MySQLでINを正しく使用するには?

mysql> select * from user_table; 
+--------+------+------+ 
| name | dep | uid | 
+--------+------+------+ 
| frank | IT | 1001 | 
| jack | IT | 1002 | 
| Sissel | FA | 1003 | 
| Li  | IT | 1004 | 
| Mok | PM | 1005 | 
+--------+------+------+ 

第二1:

mysql> select * from money_log; 
+------+-------+ 
| uid | money | 
+------+-------+ 
| 1001 | 9989 | 
| 1001 | 89 | 
| 1001 | 189 | 
| 1002 | 389 | 
+------+-------+ 

そして私はでお金を合計してみてください:

SELECT uid, sum(money) as moneys 
FROM money_log 
WHERE uid in (
    SELECT uid 
    FROM user_table 
    WHERE dep='IT' 
) 
GROUP BY uid; 

結果は以下のとおりです。私は何を期待

+------+--------+ 
| uid | moneys | 
+------+--------+ 
| 1001 | 10267 | 
| 1002 | 389 | 
+------+--------+ 

は次のとおりです。

+------+--------+ 
| uid | moneys | 
+------+--------+ 
| 1001 | 10267 | 
| 1002 | 389 | 
| 1004 | 0 | 
+------+--------+ 

これを行うには、何か良い方法はありますか?

答えて

1

使用LEFT JOIN代わり

select u.uid, coalesce(sum(m.money),0) as money 
from user_table u 
left join money_log m on u.uid = m.uid 
where u.dep = 'IT' 
group by u.uid 

NB:あなたはすべての列を参照するテーブルの別名が含まれていることを確認します。

+0

これはuidに 'NULL'を表示します1004 –

+0

そのためにcoalesce()を使用してください –

+0

@Used_byは既に動作していますが、これを行うためのハック方法はありますか?私は 'IN'を使ってこれを行うことができますか? –

関連する問題