2017-02-27 79 views
0

我有兩個表格,用戶和調查。我想要查詢表格用戶並加入表格調查,只有用戶表中每條記錄返回最低值的調查記錄。 我想避免子查詢和臨時表。加入記錄的最低值

表用戶:

-------------- 
| uid | name | 
-------------- 
| 1 | mike | 
| 2 | john | 
| 3 | bill | 
-------------- 

表調查:

---------------------- 
| id | uid | value | 
---------------------- 
| 1 | 3 | 9  | 
| 2 | 3 | 5  | 
| 3 | 1 | 3  | 
| 4 | 1 | 7  | 
| 5 | 1 | 2  | 
| 6 | 2 | 4  | 
| 7 | 2 | 9  | 
| 8 | 1 | 0  | 
| 9 | 2 | 5  | 
--------------------- 

預期輸出:

--------------------- 
| id | name | value | 
--------------------- 
| 8 | mike | 0  | 
| 2 | bill | 5  | 
| 6 | john | 4  | 
--------------------- 

什麼樣加入我應該做的,或者我應該怎麼寫查詢?

+2

我將使用子查詢從調查表中返回所需的記錄並將其添加到用戶表 –

+0

該表可能有多達100萬條記錄。子查詢不會變得很慢嗎? – JoeBateMuma

+0

這可能取決於哪些索引已就位並且數據庫服務器規範 –

回答

0

下面的查詢獲取與最小值(不選擇的值根據與價值存在的另一項調查)的所有行

試試這個:

SELECT u.*, s.value 
FROM survey s 
JOIN users u 
    ON s.uid = u.uid 
WHERE NOT EXISTS(
    SELECT 'maximum' 
    FROM survey s2 
    WHERE s2.uid = s.uid 
    AND s2.value < s.value) 
0

你可以使用這樣的事情:

select s.id, u.name, y.min_value 
    from 
    (
     select uid, min(value) as min_value 
     from survey 
     group by uid 
    ) y 
    join survey s 
     on s.value = y.min_value 
     and s.uid = y.uid 
    join user u 
     on u.uid = y.uid 
0

我認爲這將有助於你

SELECT * FROM SURVEY S 
INNER JOIN USERS U 
ON S.UID=U.UID 
QUALIFY ROW_NUMBER() OVER (PARTITION BY S.UID ORDER BY S.VALUE1 ASC)=1; 
+0

問題是關於MySQL。這看起來不像MySQL。 – Pang

+0

SEL主。 ID,main.UID,main.VALUE1 FROM( SEL S.ID,S.UID,S.VALUE1,COUNT(*)AS ROW_NUMBERS 根據調查小號 INNER JOIN調查乙 ON S.UID = B.UID AND S.VALUE1> = B.VALUE1 GROUP BY S.ID,S.UID,S.VALUE1)主 INNER JOIN USERS main.UID = u.UID AND ROW_NUMBERS = 1 請其標記爲回答ù ON – user2466009