【问题标题】:mysql select only X number of diffent Y row valuesmysql只选择X个不同的Y行值
【发布时间】:2013-10-02 12:33:24
【问题描述】:

我有一个要从中选择的表,我只想要 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)的结果。

【问题讨论】:

标签: mysql select limit


【解决方案1】:

实际上是我自己想出来的,只需要使用 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;

【讨论】:

    【解决方案2】:

    可能使用子选择来获取前 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
    

    【讨论】:

      【解决方案3】:

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

      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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-29
        • 2018-12-13
        • 2013-11-22
        • 2018-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-01
        相关资源
        最近更新 更多