数据:
我有一个带有以下示例行的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
语句。该单个语句可以使用任何东西,但可以使用聚合函数。
提前感谢您的回答!
答案 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