2016-08-08 50 views
0

我想從表中選擇列中包含50個最頻繁值的所有行。我試圖使用這樣的連接,但似乎我選擇左連接是錯誤的。聲明的內部看起來很好。我在聲明中應該改變什麼?選擇一列中最頻繁的值的行MySQL

SELECT col1, col2 
FROM tbl as t1 
LEFT JOIN (
    SELECT id 
    FROM tbl 
    WHERE id > 123 
     AND id < 987654 
    GROUP BY col1 
    ORDER BY COUNT(id) DESC 
    LIMIT 50 
) AS t2 
ON t1.id = t2.id 
+0

有什麼不對您的查詢?您是否嘗試將其更改爲「內部連接」? – sgeddes

+0

內部連接只返回50行的c。奇怪的是,當我將內部select中的限制更改爲5時,返回的行數沒有更改。 – pedmillon

+0

當使用'left join'時,結果將是相同的,有些人只會從't2'中得到'null'(如果你正在顯示的話)。也許樣本數據和預期的結果將有助於... – sgeddes

回答

0

而不是一個聯接,你試過使用IN運算符作爲WHERE子句的一部分嗎?

例如...

SELECT col1, col2 
FROM tbl as t1 
WHERE t1.id IN (
    SELECT id 
    FROM tbl 
    WHERE id > 123 
     AND id < 987654 
    GROUP BY col1 
    ORDER BY COUNT(id) DESC 
    LIMIT 50 
) 
+0

出於某種原因,我不能在IN子句中使用LIMIT – pedmillon

0

右連接,如果你的查詢是正確的應該工作,返回T1的任何匹配的行T2(相對於T1的所有行和匹配T2的或空):

SELECT col1, col2 
FROM tbl as t1 
RIGHT JOIN (
    SELECT id 
    FROM tbl 
    WHERE id > 123 
     AND id < 987654 
    GROUP BY col1 
    ORDER BY COUNT(id) DESC 
    LIMIT 50 
) AS t2 
ON t1.id = t2.id 
0

我意識到我的查詢是OK,我只是想參加在col1,而不是ID :)

SELECT col1, col2 
FROM tbl as t1 
LEFT JOIN (
    SELECT col1 
    FROM tbl 
    WHERE id > 123 
    AND id < 987654 
    GROUP BY col1 
    ORDER BY COUNT(id) DESC 
    LIMIT 50 
) AS t2 
ON t1.col1 = t2.col1 
相關問題