SQL where 子句选择特定数据

SQL where clause selecting specific data

在 Microsoft SQL 中,我正在尝试 select 来自 table 的特定结果(如果可用)。否则,应检索其他数据。

给出场景tableA包含各种水果。我想收集红色的苹果,否则,应检索除红色以外的任何其他颜色。

我不确定使用哪种方法,是使用 Case 语句还是在 where 子句中使用 EXISTS。我尝试了两种方法,但没有达到预期的效果。

select * 
from tableA 
where fruit = 'apple' 
and color = case when color = 'red' then 
                      'red' 
                 else color <> 'red' 
            end

根据一些初步评论,详细说明现有问题,

如果将其放入 If else 逻辑中,它将是

如果有红苹果,则检索红苹果,否则检索除红色以外的任何其他颜色。

不清楚 except for EA 是什么意思。

我的解释是,您想要 fruit = 'apple' and color = 'red' 处的所有行,但如果没有这样的行,return 所有苹果 (如 none它们是红色的)?

我会使用 IF 条件来避免不必要地读取 table。

SELECT *
  INTO #temp
  FROM your_table
 WHERE fruit = 'apple' AND color = 'red'

IF @@rowcount = 0
  SELECT *
    FROM your_table
   WHERE fruit = 'apple'
ELSE
  SELECT *
    FROM #temp

DROP TABLE #temp

演示:https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=b9ce49d1934c149f787c7317f3186656