2015-04-26 39 views
1

好了,所以我在MySQL服務器與賣家的評論的表:搜索最大值,並與其他分比較SQL

SellerReview (ID, User_ID, Time, Review, Seller_id) 

以及其中Seller_id的是再加上一個名用戶(ID另一個表,名稱)。

現在我必須做一個查詢,以便選擇元組(V1,V2),其中V2的最大查看嚴格小於V1的最小查看。

我所擁有的是:

SELECT U1.name AS V1, U2.naam AS V2 
FROM Users AS U1, Users AS U2, SellerReview AS S1, SellerReview AS S2 
WHERE U1.id = S1.seller_id 
    AND G2.id = V2.seller_id 
    AND ((SELECT MAX(S.Review) 
     FROM SellerReview AS S 
     WHERE S.Seller_id = U1.id) > (SELECT MIN(S.review) 
             FROM SellerReview AS S 
             WHERE S.Seller_id = G2.id)) 

但我沒有得到正確的表。有誰知道這個問題或任何人可以幫助我?謝謝!

+0

如果您喜歡,請考慮遵循以下簡單的兩步操作步驟:1.如果您尚未這樣做,請提供適當的DDL(和/或sqlfiddle),以便我們可以更輕鬆地複製問題。 2.如果您尚未這樣做,請提供與步驟1中提供的信息相符的所需結果集。 – Strawberry

回答

2

爲了讓所有的評審人員都沒有重複,請加入U2.id < U1.id。從那裏你可以使用having來確保第一個用戶的最大審查小於另一個用戶的最小審查。

SELECT U1.name AS V1, U2.name AS V2 
FROM Users AS U1 
JOIN SellerReview AS S1 on U1.id = S1.seller_id 
JOIN Users AS U2 ON U2.id < U1.id 
JOIN SellerReview S2 on U2.id = S2.seller_id 
GROUP BY U1.name, U2.name 
HAVING MAX(S2.review) < MIN(S1.review) 

此查詢假定Users.name是唯一的。如果不是,則應該按Users.id進行分組,然後返回到用戶表以獲取名稱。

+1

謝謝,它工作正常! –