我有一个表格,其值如下所示:
user_id | value | disabled
--------------------------
| hello | false
15 | hello | true
使用默认值disabled=false
然后,用户可以选择要禁用的值,以便这些单词不会出现在列表中,只有对他们可见。
我的目标是能够返回所有系统生成的值的组合以及用户设置的所有值,其中值未被禁用。
查询目前看起来像这样:
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
。
它应该做的是,因为它看到用户生成的值被禁用,所以它不应该再返回系统生成的值。
任何想法或建议都将不胜感激!
答案 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);