简化UNION查询以使用单个SELECT

时间:2013-08-07 19:57:08

标签: sql sqlite android-sqlite

数据:

我有一个带有以下示例行的sqlite表:

+-------------+----------------+-----------------+
| id          | groupId        | selected        |
+-------------+----------------+-----------------+
|           1 | -1             | 0               |
|           2 | 2              | 0               |
|           3 | 2              | 1               |
|           4 | 5              | 0               |
+-------------+----------------+-----------------+

如果groupId小于0,则非常简单,而不是单个元素,否则它就在一个组中(即使groupId没有引用任何id}第

查询:

我希望过滤groupId小于0且不是selected的每个元素以及每个组中的每个第一个元素。在此表中,id s:1,2和4。

UNION的当前解决方案:

SELECT * FROM (SELECT * FROM Elements WHERE (groupId < 0 AND selected = 0 ) UNION SELECT * FROM Elements WHERE groupId >= 0 GROUP BY groupId)

目标:

我想更改查询以仅使用单个SELECT语句。该单个语句可以使用任何东西,但可以使用聚合函数。

提前感谢您的回答!

1 个答案:

答案 0 :(得分:1)

不需要联合,它可以在一个WHERE子句中完成。以下是将返回您请求的ID列表的查询。

SELECT  MIN_ID
FROM    (
        SELECT  GROUPID
                ,MIN(ID) AS MIN_ID
        FROM    ELEMENTS
        WHERE   (GROUPID < 0 AND SELECTED = 0)
        OR      GROUPID >= 0
        GROUP BY
                GROUPID
        )

以下是基于以下评论的第二个查询。

SELECT  GROUPID
        ,MIN(ID) AS MIN_ID
FROM    ELEMENTS
WHERE   (GROUPID < 0 AND SELECTED = 0)
OR      GROUPID >= 0        
GROUP BY
        GROUPID