Могу ли я сделать попарно и не попарно подзапрос вместе в SQL - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь выполнить запрос, который использует один попарный и один непарный подзапрос.Когда условием основного запроса является «и» (оба подзапроса должны совпадать), он возвращает ноль строк, где он должен возвращать две строки (проверено графически).Основной запрос, однако, работает, когда условие "или".Запрещен ли этот тип транзакций в SQL?

Я не могу дать фактический запрос, потому что он слишком длинный, благодаря именам столбцов и тому подобному, но этот пример представляет ситуацию -

select ...
from <tablename>
-- tuple (pairwise) comparison
where (columnA, columnB) in (select columnA, columnB 
                             from <tablename> 
                             where <some_condition_1>)
-- single column comparison
AND columnC in (select columnC 
                from <tablename> 
                where <some_condition_2>);

При выполнении этого запроса я не получаю никаких результатов (нет; пустая таблица), но когда я заменяю AND на OR, я получаю результат (хотя и не желаемый).Это не тот запрос, который я ДОЛЖЕН выполнить, но я пытаюсь понять, работает ли он на самом деле или нет.Возможно, однажды такой запрос может пригодиться мне или кому-то еще.

Я использую Oracle 11g XE.Однако, если решения для разных СУБД различны (например, Postgres или SQL Server), укажите их, если это возможно.Я тоже учу их.

1 Ответ

0 голосов
/ 11 сентября 2018

Я пробовал аналогичный запрос с использованием схемы HR в версии 12c, и, похоже, он работает.

SELECT *
FROM   employees
WHERE  (manager_id, department_id) IN (SELECT manager_id,
                                                department_id
                                         FROM   employees
                                         WHERE  first_name = 'John')
AND job_id IN (SELECT job_id
               FROM   employees
               WHERE  last_name = 'Faviet')
; 

Это должно вернуть 5 строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...