当一些应该有一个空字段时,用空字段在MySQL中查找重复项

时间:2012-12-02 17:49:06

标签: mysql

需要MySQL专家的帮助。我有一个可怕的数据库可以使用,我正在尝试修改结构,但这个让我感到困惑。该表最初有一个id,名称和4个卖列。我将其转换为id,name和single sell列,基本上是一个数据透视表。这很好,下一个问题是摆脱重复,因为不是每个条目都有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

所以通过分组我设法让它达到这样的程度:

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

现在这里是我撞墙的地方。弗雷德很好,他应该有一个入口,但没有卖掉,玛丽也很好,她已经全部4个卖满了。鲍勃是个问题。如何在不影响Fred的情况下为他删除空卖?

我会说我尝试了但我在这里完全失去了所以我还没有尝试过任何东西。

1 个答案:

答案 0 :(得分:1)

您正在寻找姓名和其他数据之间的outer join

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

sqlfiddle上查看。

但实际上,您应该进一步normalise您的架构,以便有一个(personid, name)表和一对(personid, sellid)对(从中你基本上执行上面的外部联接作为& ;当需要获得必要的记录,包括NULL s)。