首先,这个问题的标题很糟糕,但我没有找到更好的方法来描述我的问题。
可能有一个非常简单的方法可以做到这一点,但我无法弄清楚。这非常类似于this问题,但我正在 sqlite3 (iOS)上运行,所以我怀疑我的选择更加有限。
我有一张包含产品记录的表。所有记录都有一个 ID(注意:我不是在谈论行 ID,而是每个产品唯一的标识号)。某些产品在表中可能有两个条目(均具有相同的 ID)。唯一的区别在于特殊列(假设列颜色可以是红色或绿色)。
我想要做的是根据颜色的值创建一个独特产品的列表,如果同一产品同时存在绿色和红色记录,则优先考虑绿色。
简而言之,如果我有以下情况:
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 行。我缺少什么?
Edit:还有一个问题:如何才能使其与记录子集一起使用,即。如果我想过滤一些记录而不是整个表?
例如,如果我有类似 SELECT * FROM table WHERE ProductID LIKE "1%" 的内容...我如何检索每个唯一的产品,但仍然尊重颜色优先级(绿色>红色)?