Выберите утверждение в левой части, где условие - PullRequest
0 голосов
/ 24 апреля 2019

Будет ли проблема, если запрос select находится слева от предложения where, а не справа, который мы обычно используем.

select * from ABC A where (select ID from XYZ) in (A.ID, A.PID);

Можно ли иметь select запрос в левой части запроса?

Ответы [ 3 ]

2 голосов
/ 24 апреля 2019

Я думаю exists делает то, что вы хотите:

select a.*
from ABC a
where exists (select 1
              from XYZ x
              where x.id in (A.ID, A.PID)
             );
0 голосов
/ 24 апреля 2019

Для этой проблемы есть вещь, называемая INNER JOIN.

select A.* 
from ABC A
INNER JOIN XYZ X ON X.ID = A.ID OR X.ID = A.PID

Нет необходимости в любом предложении where, поскольку это отфильтрует результаты.

ИЛИ это можно сделать, выполнивэто:

SELECT *
FROM ABC
WHERE 
ABC.ID IN (select ID from XYZ) 
OR ABC.PID IN (select ID from XYZ)

Но первое решение должно быть предпочтительным.

0 голосов
/ 24 апреля 2019

Вы можете справиться с этим, используя JOIN

select * 
from   ABC
left join  XYZ on ABC.ID = XYZ.ID or ABC.PID = XYZ.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...