MYSQL:处理多个左连接
我有一个查询,其中有一个MYSQL:处理多个左连接,mysql,join,group-by,Mysql,Join,Group By,我有一个查询,其中有一个左连接,可以正常工作。然而,当我将第二个左联接添加到第一个表中每个字段都有多条记录的表中时,我得到的是两个表中结果的乘积,即books x publishers返回的结果。我怎样才能防止这种情况发生 SELECT a.*,b.*,p.*, group_concat(b.id as `bids`) FROM authors `a` LEFT JOIN books `b` ON b.authorid = a.id LEFT JOIN pu
左连接
,可以正常工作。然而,当我将第二个左联接添加到第一个表中每个字段都有多条记录的表中时,我得到的是两个表中结果的乘积,即books x publishers返回的结果。我怎样才能防止这种情况发生
SELECT a.*,b.*,p.*, group_concat(b.id as `bids`)
FROM authors `a`
LEFT JOIN books `b`
ON b.authorid = a.id
LEFT JOIN publishers `p`
on p.authorid = a.id
GROUP by a.id
编辑:
我明白了。方法是使用子查询,如中所示:
如果执行多个左联接,查询将返回结果的笛卡尔乘积。为了避免这种情况,并且只获得所需字段的一个副本,请按如下所示对每个要联接的表执行子查询。希望这对将来的人有所帮助
SELECT u.id
, u.account_balance
, g.grocery_visits
, f.fishmarket_visits
FROM users u
LEFT JOIN (
SELECT user_id, count(*) AS grocery_visits
FROM grocery
GROUP BY user_id
) g ON g.user_id = u.id
LEFT JOIN (
SELECT user_id, count(*) AS fishmarket_visits
FROM fishmarket
GROUP BY user_id
) f ON f.user_id = u.id
ORDER BY u.id;
更新您的问题添加适当的数据样本和预期结果更新问题…有什么想法吗?您的问题不清楚。。。请添加适当的数据样本和预期结果。。
SELECT u.id
, u.account_balance
, g.grocery_visits
, f.fishmarket_visits
FROM users u
LEFT JOIN (
SELECT user_id, count(*) AS grocery_visits
FROM grocery
GROUP BY user_id
) g ON g.user_id = u.id
LEFT JOIN (
SELECT user_id, count(*) AS fishmarket_visits
FROM fishmarket
GROUP BY user_id
) f ON f.user_id = u.id
ORDER BY u.id;