2016-08-08 13 views
0

50の最も頻繁な列の値を含む表からすべての行を選択したいとします。私はそのような結合を使用しようとしましたが、LEFT JOINの私の選択が間違っているようです。ステートメントの内部はうまくいくようです。私の声明で何を変えるべきですか?最も頻繁に値が1つの列を選択してください。

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

クエリが悪いのか?代わりに 'inner join'に変更しようとしましたか? – sgeddes

+0

内部結合は、わずか50行のcを返します。奇妙なことは、内側の選択範囲内の制限を5に変更したときに返される行の数が変更されなかったことです。 – pedmillon

+0

'left join'を使用すると、結果は同じになります。いくつかは' t2'の 'null' id(表示していれば)だけです。多分サンプルデータと期待される結果は助けになるでしょう... – sgeddes

答えて

0

JOINではなく、WHERE句の一部としてIN演算子を使用しようとしましたか?例えば

あなたのサブクエリが(T1のすべての行とマッチングさt2のか、ヌルではなく)T1からT2のいずれかの一致する行を返し、正しいかどうか...

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

右参加が動作するはずですが。

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

私はちょうどCOL1、ないIDに参加したかった、私のクエリはOKだった実現:)

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 
関連する問題