我做的使用MySQL 5,要求項目如下:SQL查詢重複結果
提供的用戶名,設備類型,操作系統版本和水果參與選秀權,即用戶有 相同設備類型,分別爲運行iOS 4或4.1,並且挑相同水果
相關的表如下:
用戶:{UID:INT,名稱:VARCHAR(45),deviceOS:VARCHAR(45),設備類型:VARCHAR(45)}
取貨:{UID:INT,TS:時間戳,水果:VARCHAR(45) }
(主鍵以粗體顯示。 UID在皮克是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也不適用於一般情況。因此經過無數小時試圖弄清楚這一點,我必須問:
有沒有辦法在一般情況下防止這種重複?
謝謝!
這樣一個簡單而強大的詭計!謝謝,正是我期待的! –