数据:
我有一个sqlite表,其中包含以下示例行:
+-------------+----------------+-----------------+
| id | groupId | selected |
+-------------+----------------+-----------------+
| 1 | -1 | 0 |
| 2 | 2 | 0 |
| 3 | 2 | 1 |
| 4 | 5 | 0 |
+-------------+----------------+-----------------+
这很简单,如果groupId
小于0,那么它是一个单独的元素,否则它在一个组中(即使groupId
没有引用任何id
s。
查询:
我想过滤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
语句。这个单独的语句可以使用任何东西,但不能使用聚合函数。
提前感谢您的回答!
不需要联合,所有这些都可以在一个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