0

在这里需要 MySQL 专家的帮助。我有一个糟糕的数据库可以使用,我正在尝试稍微修复一下结构,但这让我感到困惑。该表最初有一个 id、name 和 4 个卖列。我将其转换为 id、name 和单个销售列,基本上是一个数据透视表。很好,下一个问题是消除重复项,因为并非每个条目都有 4 个出售条目。

所以在第一次手术之后,我得到了这样的结果:

id     name     sellid
1      bob      111
1      bob      
1      bob      
2      mary     112
2      mary     113
2      mary     114
2      mary     115
3      fred
3      fred
3      fred
3      fred

所以通过 group by 我设法让它看起来像这样:

id     name     sellid
1      bob      111
1      bob      
2      mary     112
2      mary     113
2      mary     114
2      mary     115
3      fred

现在这是我碰壁的地方。Fred 很好,他应该有一个 entry 但没有 sellid,Mary 也很好,她的 4 个 sellid 都满了。鲍勃是个问题。如何在不影响 Fred 的情况下为他移除空的 sellid?

我会说我尝试过的,但我在这里完全不知所措,所以我真的还没有尝试过任何东西。

4

1 回答 1

1

您正在寻找您的姓名和其他数据之间的外部连接:

SELECT * FROM
  (SELECT DISTINCT id, name FROM my_table) t1 NATURAL LEFT JOIN
  (SELECT * FROM my_table WHERE sellid IS NOT NULL) t2

sqlfiddle上查看。

但实际上,您应该进一步规范化您的模式,以便您拥有一个表(personid, name)和一个(personid, sellid)对表(当需要获取包括NULLs 在内的必要记录时,您基本上可以从中执行上述外部联接作为 & )。

于 2012-12-02T17:59:44.817 回答