小编典典

根据列优先级选择记录

sql

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

可能有一种非常简单的方法来执行此操作,但是我在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行。如何实现呢?

我当前的方法是拥有单独的表,并手动进行联接,但这显然是一个非常糟糕的主意。

注意:我尝试从这里使用相同的方法:

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的productID之类的“ 1%”……我如何检索每个唯一的产品,但仍要遵守颜色优先级(GREEN>
RED)?


阅读 163

收藏
2021-04-14

共1个答案

小编典典

您的查询几乎是正确的。只是使用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");
2021-04-14