SQL-带大小写选择语句的IN子句

时间:2019-02-21 14:06:23

标签: mysql sql

我需要从表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 )

但是得到的只有一个记录。我得到的第一个记录。 谁能帮我。请

3 个答案:

答案 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))