根据列优先级选择记录

luc*_*anf 2 sql sqlite select

首先,这个问题的标题是可怕的,但我没有找到更好的方式来描述我的问题.

这可能是一种非常简单的方法,但我无法理解.这与这个问题非常相似,但是我在sqlite3(iOS)上运行,所以我怀疑我的选项更加有限.

我有一张包含产品记录的表格.所有记录都有一个ID(注意:我不是在谈论行ID,而是每个产品唯一的标识号).某些产品可能在表中有两个条目(两个具有相同的ID).唯一的区别在于一个特殊的列(假设列COLOR可以是RED或GREEN).

我想要做的是根据COLOR的值创建一个独特产品列表,如果同一产品同时存在GREEN和RED记录,则优先选择GREEN.

简而言之,如果我有以下情况:

id       PRODUCT ID    COLOUR
1        1001          GREEN
2        1002          GREEN
3        1002          RED
4        1003          RED
Run Code Online (Sandbox Code Playgroud)

我希望我的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");
Run Code Online (Sandbox Code Playgroud)

但我得到的结果是1,2,3,4行而不是1,2,4行.我错过了什么?

编辑:还有一个问题:如何使用一部分记录,即.如果不是整个表我想过滤一些记录?

例如,如果我有SELECT*FROM table WHERE productID LIKE"1%"......我如何检索每个独特的产品,但仍然尊重颜色优先级(GREEN> RED)?

Joh*_*Woo 5

您的查询几乎正确.只是使用PRODUCTID而不是ID.

SELECT * 
FROM xx
WHERE f_COLOUR = "GREEN"
UNION
SELECT * 
FROM xx 
WHERE PRODUCTID not in 
                (SELECT PRODUCTID
                 FROM xx 
                 WHERE f_COLOUR = "GREEN");
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示