sqlite 查询 - select 更喜欢某个值的数据

sqlite query - select data which prefers some value

我正在尝试创建 sqlite 查询,但遇到了一些问题。

假设 table 有三列 id、foreign-id 和 value。

我需要 select 具有不同 foreign_id 的所有行都具有给定值,但是对于所有不同的 foreign_id 可能不存在该值。 在这种情况下,值设置为某个后备值的行必须 selected(此类行始终存在)foreign_id。

抱歉我的英语不好,因为我的母语不是英语。

这是一个例子:

Table:

id | foreign_id | value
------------------------
1  | 1          | 1
2  | 1          | 2
3  | 1          | 3
4  | 2          | 1
5  | 2          | 3

如果所需值为 2 且回退值为 1,则查询应 return

id | foreign_id | value|
------------------------
2  | 1          | 2
4  | 2          | 1

这是 ID 为 1 的 return 行,因为它具有 foreign_id 1 所需的值 2。 它 return id 为 4 的行,因为对于 foreign_id 2,值为 2 的行不存在,所以它 select 是后备值为 1 的行。

希望这能稍微解决我的问题。

您也许可以使用 Union 来完成...例如:

SELECT DISTINCT (foreign_id), value
FROM TABLE 
WHERE value = 2
UNION
SELECT DISTINCT (foreign_id), '1' as value
FROM TABLE 
WHERE foreign_id NOT IN (
  SELECT DISTINCT (foreign_id), value
  FROM TABLE 
  WHERE value = 2
)

其中所有值为 2 的值设置为 2,其他所有值设置为 1

(我还没有测试过这个查询,你可能需要做一些调整)

这是我根据赛斯的回答得出的解决方案。

SELECT DISTINCT (foreign_id), value, id FROM testTable 
  WHERE value = 2
UNION SELECT DISTINCT (foreign_id), value, id FROM testTable
  WHERE value = 1 
  AND foreign_id NOT IN 
  ( 
    SELECT foreign_id 
    FROM testTable
    WHERE value = 2
  )