2013-09-30 109 views
1

我以为我知道如何做一个简单的外连接,但似乎我错了。我是MySQL新手,但我确实拥有Oracle经验。MySQL外部连接给予最大连接大小错误

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

成员表包含多于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 

最大连接大小当前设置为700万美元。

我在这里不理解什么?

回答

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标记来区分列与保留字。

+0

谢谢。我尝试在tic标记中包装“名称”列,但这没有帮助。我也试图取出计数,只选择member_id和名称,但仍然有错误。 您提供的查询工作。我不能说我完全明白为什么。感谢您的帮助! – Lacarno