MySQL5を使用してプロジェクトを実行しています。要件は次のとおりです。
ユーザーが同じデバイスタイプを持ち、iOS 4または4.1を実行していて、同じフルーツを選んだ場合に、ピックに関係するユーザー名、デバイスタイプ、OSバージョン、およびフルーツを提供します
関連する表は次のとおりです。
ユーザー:{ uID:INT、名前:VARCHAR(45)、deviceOS:VARCHAR(45)、deviceType:VARCHAR(45)}
ピック:{ uID:INT、ts:TIMESTAMP、フルーツ:VARCHAR(45)}
(太字の主キー。PickのuIDは、UserのuIDの外部キーです。)
私は次のクエリを実行しています:
SELECT DISTINCT NAME1, OS1, DEV1, NAME2, OS2, DEV2, P1.fruit FROM Pick AS P1, Pick AS P2,
(SELECT U1.uID AS User1, U1.name AS NAME1, U1.deviceOS AS OS1, U1.deviceType AS DEV1,
U2.uID AS User2, U2.name AS NAME2, U2.deviceOS AS OS2, U2.deviceType AS DEV2
FROM User AS U1, User AS U2
WHERE (U1.uID != U2.uID) AND
(U1.deviceType = U2.deviceType) AND
(U1.deviceOS = "4" OR U1.deviceOS = "4.1") AND
(U2.deviceOS = "4" OR U2.deviceOS = "4.1")) AS PartialResult
WHERE (P1.uID = PartialResult.User1) AND
(P2.uID = PartialResult.User2) AND
(P1.fruit = P2.fruit)
これにより、次の結果が返されますが、ご覧のとおり、何らかの形で「複製」されています。
GROUP BYフルーツを使用してこれを解決しようとしましたが、一般的なケースでは正しい結果が返されません。制限1も、一般的なケースでは機能しません。それで、これを理解しようと何時間も試みた後、私は尋ねなければなりません:
一般的なケースでこの種の重複を防ぐ方法はありますか?
ありがとうございました!