Sql - IN Предложение с оператором выбора регистра - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужно выбрать список записей из таблицы A, где идентификатор присутствует в таблице 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 )

Но то, что я получаю, это только одна запись. Первая записья получаю.Может кто-нибудь мне помочь.пожалуйста * * 1004

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Я бы предложил:

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.Если это так, то логика должна быть изменена.

0 голосов
/ 21 февраля 2019

Вы можете попробовать что-то подобное, не используя предложение 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))
0 голосов
/ 21 февраля 2019

Хм, это сложно.Обычно мне не нравятся выражения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...