0

ここでは、MySQL の専門家の助けが必要です。私はひどいデータベースを扱っており、構造を少し修正しようとしていますが、これには困惑しています。テーブルには最初、ID、名前、および 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

ここで私は壁にぶち当たりました。フレッドは元気です。彼はエントリを持っているはずですが、セリッドはありません。メアリーも元気です。彼女は 4 つのセリッドをすべて満たしています。ボブが問題です。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)ペアのテーブルを作成する必要があります (s を含む必要なレコードを取得する必要がある場合は、そこから & として上記の外部結合を本質的に実行しますNULL)。

于 2012-12-02T17:59:44.817 に答える