我在表中有两列。颜色和形状。而且我只希望没有正方形的那些颜色。
使用:
SELECT DISTINCT color
FROM t1
WHERE shape NOT IN ('square');
将导致结果为黄色,但没有此线条为正方形。我希望这种形状的存在可以自动排除黄色。
Color Shape
yellow round
yellow square
yellow oval
white round
white oval
答案 0 :(得分:1)
您需要在此处使用子查询:
SELECT DISTINCT color
FROM t1
WHERE color NOT IN (select color from t1 where shape='square');
说明 子查询将返回形状为正方形的颜色,然后使用 NOT IN 子句可以从输出中过滤掉这些颜色
答案 1 :(得分:1)
如果您不想使用square
形状的颜色,则可以使用not exists
来代替:
select t.*
from table t
where not exists (select 1 from table t1 where t1.color = t.color and t1.shape = 'square');
答案 2 :(得分:0)
我将使用group by
和having
:
SELECT color
FROM t1
GROUP BY color
HAVING SUM(CASE WHEN shape = 'square' THEN 1 ELSE 0 END) = 0;
HAVING
子句计算具有square
的行数。 = 0
说不存在。在许多情况下,这可能比使用SELECT DISTINCT
过滤器的WHERE
更快。 SELECT DISTINCT
和GROUP BY
的数据库工作类似。