MySQL外连接给出最大连接大小错误

时间:2013-09-30 23:04:19

标签: mysql sql left-join outer-join

我以为我知道如何做一个简单的外连接,但看起来我错了。我是MySQL新手,但我确实有Oracle经验。

我想要查询两个表。第一个表是成员表。第二个表称为购买。购买包含会员购买的每件商品的行。

成员表包含超过2700行。购买表包含少于130,000行。

我最终希望获得所有会员的列表,其中包含他们购买的独特商品的数量。这是我的疑问:

select mem.member_id
      ,mem.name
      ,count(distinct pur.item_id)
from members mem
    left outer join purchases pur on mem.member_id = pur.member_id

执行查询时出现以下错误:

1104 - The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay

MAX Join Size目前设定为700万。

我在这里不理解什么?

1 个答案:

答案 0 :(得分:0)

您的查询看起来很好,但如果显然失败了,您可以尝试以下

select
      m.member_id,
      m.`name`,
      coalesce( cnts.UniqItems, 0 ) as UniqItems
   from
      members m
         left join ( select p.member_id, count( distinct p.item_id ) as UniqItems
                        from purchases p
                        group by p.member_id ) cnts
            on m.member_id = cnts.member_id

写完之后,我认为问题可能是列的保留字“NAME”,可能只需要用tic标记包装来区分列与保留字。