用于过滤掉标志是否被禁用的SQL查询

时间:2017-12-11 01:55:00

标签: sql postgresql

我有一个表格,其值如下所示:

user_id | value | disabled
--------------------------
        | hello | false
   15   | hello | true

使用默认值disabled=false

自动生成没有user_id的行

然后,用户可以选择要禁用的值,以便这些单词不会出现在列表中,只有对他们可见。

我的目标是能够返回所有系统生成的值的组合以及用户设置的所有值,其中值未被禁用。

查询目前看起来像这样:

SELECT DISTINCT ON (value)
user_id, value, disabled
FROM table
WHERE value LIKE '%%'
AND disabled = false
AND (user_id IS NULL OR user_id=15)
ORDER BY value, user_id;  

但是,使用此查询时,它仍会返回hello,因为即使它看到用户生成的值为disabled=true,它仍会传递系统生成的disabled。 {1}}设置为false

它应该做的是,因为它看到用户生成的值被禁用,所以它不应该再返回系统生成的值。

任何想法或建议都将不胜感激!

1 个答案:

答案 0 :(得分:1)

我想你想要这个:

SELECT DISTINCT value
FROM table t
WHERE value LIKE '%%' AND
      disabled = false AND
      (user_id IS NULL OR user_id = 15) AND
      NOT EXISTS (SELECT 1 FROM table t2 WHERE t2.value = t.value and t2.disabled = true);