我需要从表A中选择ID出现在表B或C中的记录列表。我的查询是这样的
SELECT * FROM TABLE_A
WHERE ID IN (
CASE WHEN (SOME CONDITION )
THEN
SELECT _ID FROM TABLE_B
ELSE
SELECT _ID FROM TANLE_C
END )
但是得到的只有一个记录。我得到的第一个记录。 谁能帮我。请
答案 0 :(得分:1)
嗯,这很棘手。通常,我不喜欢CASE
子句中的WHERE
表达式,但是为了不必重复
SELECT *
FROM table_a
WHERE CASE WHEN <some condition>
THEN ID IN (SELECT _id FROM table_b)
ELSE ID IN (SELECT _id FROM table_c)
END
答案 1 :(得分:0)
我建议:
select . . .
from table_a a
where (<some condition> and
exists (select 1 from table_b b where b._id = a.id
) or
(not <some condition> and
exists (select 1 from table_c c where c._id = a.id
)
这假设<some condition>
不是NULL
。如果是这样,则需要调整逻辑。
答案 2 :(得分:0)
您可以尝试这样的事情,而不必使用CASE WHEN子句:
SELECT *
FROM TABLE_A
WHERE
(<SOME CONDITION> AND ID IN (SELECT _ID FROM TABLE_B))
OR
(<SOME CONDITION> AND ID IN (SELECT _ID FROM TABLE_C))