SQL查询以选择不喜欢颜色变体的颜色

时间:2018-10-19 17:46:55

标签: sql sqlite select

我正在寻找一种更好的方法来执行此操作,但没有找到适合我的具体情况的任何方法。这是在SQLite中。

我有以下查询:

select color1, color2 
from table
where color1 = 'red'
  and color2 not like '%red%' 
  and color2 not like '%scarlet%' 
  and color2 not like '%cherry%'

换句话说,我正在尝试选择与已知颜色不匹配的颜色。我必须使用like,因为这是自由格式的文本。

我的查询工作正常,但随着我向其添加更多变体而变得笨拙。我尝试将变体放在另一个表中并使用子查询,如下所示:

select color1, color2 
from table
where color1 = 'red'
  and color2 not like '%' || (select color_alias from color where color = 
'red') || '%'

但是,like语句仅计算子查询返回的第一条记录。

有人知道在查询表中包含颜色变体并仍然使用like运算符的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用exists运算符:

SELECT color1, color2
FROM   mytable
WHERE  color1 = 'red' AND
       NOT EXISTS (SELECT *
                   FROM   colors
                   WHERE  color = 'red' AND 
                          color LIKE '%' || color2 || '%')