需要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的情况下为他删除空卖?
我会说我尝试了但我在这里完全失去了所以我还没有尝试过任何东西。
答案 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)。