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 |
+----+----------+-------------+

它不会包括 id = 5 行,因为我们只获取最多 2 个不同的 some_id(在本例中为 10、20)的结果。

4

3 回答 3

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 回答
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

我不确定这是否是最佳解决方案,但它应该可以解决问题:

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 回答