我以为我知道如何做一个简单的外连接,但看起来我错了。我是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万。
我在这里不理解什么?
答案 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
标记包装来区分列与保留字。