1

我以为我知道如何进行简单的外部联接,但看来我错了。我是 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 万。

我在这里不明白什么?

4

1 回答 1

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

于 2013-09-30T23:17:35.953 回答