我被困在这里。任何人都可以帮助解决以下问题吗? 我无法使用下面的 IN ,还有其他办法吗?
keywords "int|if|else|while|float|return|void|breack|for"
-----------
int
| if
| else
| while
| float
| return
| void
| breack
| for
id "[a-zA-Z]+[0-9]*[a-zA-Z]*"
-----------
[a-zA-Z]+ [0-9]* [a-zA-Z]*
integer "[0-9]+"
-----------
[0-9]+
floatt "[0-9]+[.]+[0-9]+"
-----------
[0-9]+ [.]+ [0-9]+
symbols "[&]{2}|[|]{2}|<=|>=|[=]{2}|!=|/\\*|\\*/|[<>(){};,.+*/=-]"
-----------
[&]{2}
| [|]{2}
| <=
| >=
| [=]{2}
| !=
| /\*
| \*/
| [<>(){};,.+*/=-]
comment
-----------
// [a-zA-Z0-9_]*
答案 0 :(得分:2)
Case
表达式仅处理标量。可以使用的唯一查询是返回标量的查询。 (一行,一列。)另外一个答案也行不通,因为case
对布尔值不起作用。
但是在这种情况下,查询可以转换为:
SELECT * FROM r_table r
WHERE
(
-- other conditions
)
AND
(
r.id IN (SELECT e.r_id
FROM e_table e
WHERE @search_value
= CASE @Search_type
WHEN 1 THEN e.id
WHEN 2 THEN e.b_id
ELSE NULL END
)
)
答案 1 :(得分:1)
我不知道这是否是最简单的方法,但这样的事情应该有效:
AND (
@Search_type = 1 AND EXISTS (
SELECT e.r_id FROM e_table e WHERE @search_value = e.id AND e.r_id = r.id)
OR
@Search_type = 2 AND EXISTS (
SELECT e.r_id FROM e_table e WHERE @search_value = e.b_id AND e.r_id = r.id)
)