猿问

两个sql左联接会产生不正确的结果。

我有三张桌子:

users(id, account_balance)grocery(user_id, date, amount_paid)fishmarket(user_id, date, amount_paid)

双管齐下fishmarketgrocery对于同一个USER_ID,表可能有多个出现,但支付的日期和金额不同,或者对任何给定用户都没有。当我尝试以下查询时:

SELECT
     t1."id" AS "User ID",
     t1.account_balance AS "Account Balance",
     count(t2.user_id) AS "# of grocery visits",
     count(t3.user_id) AS "# of fishmarket visits"FROM users t1LEFT OUTER JOIN grocery t2 ON (t2.user_id=t1."id") 
     LEFT OUTER JOIN fishmarket t3 ON (t3.user_id=t1."id") GROUP BY t1.account_balance,t1.idORDER BY t1.id

它产生了一个不正确的结果:"1", "12", "12".
但当我试图LEFT JOIN只对一个表产生正确的结果。groceryfishmarket访问,这是"1", "3", "4".

我在这里做错什么了?
我正在使用PostgreSQL9.1。


青春有我
浏览 463回答 3
3回答

海绵宝宝撒

这是因为当用户表连接到杂货店表时,有3条记录匹配。然后,这三项记录中的每一项都与鱼市的4项记录相匹配,产生了12项记录。您需要子查询才能得到所要查找的内容。
随时随地看视频慕课网APP
我要回答