首先,这个问题的标题很可怕,但我没有找到更好的方式来描述我的问题。
可能有一个非常简单的方法可以做到这一点,但我无法弄清楚。这与这个问题非常相似,但我在 sqlite3 (iOS) 上运行,所以我怀疑我的选择要有限得多。
我有一张包含产品记录的表格。所有记录都有一个 ID(注意:我说的不是行 ID,而是每个产品唯一的标识号)。某些产品可能在表中有两个条目(都具有相同的 ID)。唯一的区别是在一个特殊的列中(假设列 COLOR 可以是 RED 或 GREEN)。
我想做的是根据颜色的值创建一个唯一产品列表,如果同一产品同时存在绿色和红色记录,则优先考虑绿色。
简而言之,如果我有以下情况:
id PRODUCT ID COLOUR
1 1001 GREEN
2 1002 GREEN
3 1002 RED
4 1003 RED
我希望我的 SELECT 返回第 1、2 和 4 行。我怎样才能做到这一点?
我目前的方法是有单独的表,并手动进行连接,但显然这是一个非常糟糕的主意..
注意:我尝试从这里使用相同的方法:
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%" 之类的东西......我如何检索每个独特的产品,但仍然尊重颜色优先级(绿色>红色)?