SELECT WHERE 条件中的默认比较操作数

Default comparison operand in SELECT WHERE condition

我有一个 table CategoryColours,如果找不到类别,它应该 return 默认类别“*”中的颜色。

如果 table 包含这些行的示例:

Category  Color
*         white
*         black
1         red
1         blue
1         green
1         black

如果我搜索类别“1”,查询应该得到 4 种颜色。

如果我搜索 table 中没有记录的类别“2”,查询应该从类别“*”中获取 2 种颜色。

是否可以使用 OpenSQL 在单个语句中获取我需要的确切列表?

我尝试使用 CASE 和子查询 (EXIST),但没有成功。

它不是我代码的障碍,因为我可以先检查我的类别是否有记录,或者 select 我的类别 + 默认值,然后如果另一个有记录则删除默认值。

我想你可以使用 UNION。我没有尝试代码,它可能包含类型错误。

SELECT
      category,
      color
    FROM CategoryColours
   WHERE category = lv_category
UNION
SELECT
  category,
  color
FROM CategoryColours
WHERE category eq '*'
 AND NOT EXISTS ( SELECT color 
                    FROM CategoryColours 
                   WHERE category = lv_category
                 )
INTO TABLE @DATA(lt_itab).