【发布时间】:2012-08-08 11:01:47
【问题描述】:
首先,这个问题的标题很糟糕,但我没有找到更好的方式来描述我的问题。
可能有一种非常简单的方法可以做到这一点,但我想不通。这与this 问题非常相似,但我在 sqlite3 (iOS) 上运行,所以我怀疑我的选择要有限得多。
我有一张包含产品记录的表格。所有记录都有一个 ID(注意:我说的不是行 ID,而是每个产品唯一的标识号)。某些产品可能在表中有两个条目(都具有相同的 ID)。唯一的区别在于一个特殊的列(假设列 COLOR 可以是 RED 或 GREEN)。
我想要做的是根据 COLOUR 的值创建一个独特产品列表,如果同一产品同时存在 GREEN 和 RED 记录,则优先级为 GREEN。
简而言之,如果我有以下情况:
id PRODUCT ID COLOUR
1 1001 GREEN
2 1002 GREEN
3 1002 RED
4 1003 RED
我希望我的 SELECT 返回第 1、2 和 4 行。我怎样才能做到这一点?
我目前的方法是有单独的表,并手动进行连接,但显然这是一个非常糟糕的主意..
注意:我尝试使用与 here 相同的方法:
SELECT *
FROM xx
WHERE f_COLOUR = "GREEN"
UNION ALL
SELECT *
FROM xx
WHERE id not in (SELECT distinct id
FROM xx
WHERE f_COLOUR = "GREEN");
但我得到的结果是第 1,2,3,4 行,而不仅仅是 1,2,4。我错过了什么?
编辑:请再问一个问题:如何使它适用于记录子集,即。如果我想过滤一些记录而不是整个表?
例如,如果我有类似 SELECT * FROM table WHERE productID LIKE "1%" ... 我如何检索每个唯一产品,但仍尊重颜色优先级 (GREEN>RED)?
【问题讨论】: