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).
我有一个 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).