0

2 つの異なる列値の結果のみが必要なテーブルを選択しています...これがデータに関する意味です...

some_table
+----+----------+-------------+
| id |  some_id | some_column |     
+----+----------+-------------+
|  1 |       10 |       alpha |
|  2 |       10 |       alpha |
|  3 |       10 |       alpha |
|  4 |       20 |       alpha |
|  5 |       30 |       alpha |
+----+----------+-------------+

私が実行しているクエリのタイプの例は次のとおりです。

SELECT * FROM some_table WHERE some_column = `alpha`;

その選択を変更して、最大 2 つの異なる some_id の結果のみが得られるようにするにはどうすればよいですか...結果の例は次のとおりです。

some_table
+----+----------+-------------+
| id |  some_id | some_column |     
+----+----------+-------------+
|  1 |       10 |       alpha |
|  2 |       10 |       alpha |
|  3 |       10 |       alpha |
|  4 |       20 |       alpha |
+----+----------+-------------+

最大 2 つの異なる some_id (この場合は 10、20) の結果のみを取得するため、id = 5 行は含まれません。

4

3 に答える 3

0

これが最適な解決策かどうかはわかりませんが、うまくいくはずです:

SET @firstId:=(select distinct some_id from some_table limit 1) ;
SET @secondId:=(select distinct some_id from some_table limit 1,1) ;
SELECT  * 
FROM some_table
WHERE some_column="alpha"
AND some_id IN (@firstId, @secondId);
于 2013-10-02T13:53:15.450 に答える
0

実際には、JOIN / SELECT DISTINCT コンボを使用する必要があるだけで、自分でそれを理解しました。これが正しいクエリです...

SELECT * FROM some_table s1 JOIN (SELECT DISTINCT some_id FROM s1 LIMIT 2) s2 ON s1.some_id = s2.some_id;
于 2013-10-02T13:23:10.690 に答える
0

おそらく副選択を使用して最初の2つのIDを取得し、それをテーブルに対して内部結合します

SELECT  a.id, a.some_id, a.some_column
FROM some_table a
INNER JOIN
(
    SELECT DISTINCT some_id
    FROM some_table
    ORDER BY some_id
    LIMIT 2
) b
ON a.some_id = b.some_id
于 2013-10-02T13:16:36.667 に答える