Не удается получить вывод при использовании Intersect вместе с подзапросом в SQL - PullRequest
0 голосов
/ 06 мая 2018

Неприятность:

Невозможно получить вывод, то есть определенно не может получить правильный вывод.

Вопрос:

Для этого вопроса необходимо использовать оператор Intersect. Все типы заданий типа «N» должны быть найдены и иметь описание, как указано в последней строке кода.

Используемый код:

SELECT job_id
FROM bookjobs
WHERE job_id IS 'N'
INTERSECT
SELECT job_id 
FROM po_items
WHERE item_id IS
    (SELECT item_id
    FROM items
    WHERE descr = '9KG PAPER');

Ожидаемый результат:

job_id
----------
002

Получено (от CodeRunner):

Нет выходных данных.


См. Схему базы данных для более подробной информации (Первичные ключи выделены жирным шрифтом).

Используется неизвестная СУБД. Ведет себя как PostgreSQL, а не mysql.

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

MySQL не поддерживает оператор INTERSECT. Используйте оператор UNION, те же правила применяются при использовании оператора UNION. https://www.w3schools.com/sql/sql_union.asp

Использование UNION

(
  SELECT job_id
 FROM bookjobs
 WHERE job_id = 'N'
)
UNION ALL
(
 SELECT job_id
 FROM po_items
 WHERE item_id IN (
   SELECT item_id
   FROM items
   WHERE descr = '9KG PAPER'
 )
);

иначе вы можете просто использовать INNER JOIN, это очень легко использовать

SELECT
  b.job_id
FROM
  bookjobs AS b
  INNER JOIN po_items AS pi ON pi.job_id = b.job_id
  INNER JOIN items AS i ON i.item_id = pi.item_id
WHERE
  b.job_id = 'N'
  AND i.descr = '9KG PAPER'
0 голосов
/ 06 мая 2018

Не связывайтесь с INTERSECT. Вместо этого используйте запрос на соединение:

SELECT bj.job_id
FROM bookjobs bj
INNER JOIN po_items pi ON bj.job_id = pi.job_id
INNER JOIN items i ON pi.item_id = i.item_id
WHERE i.descr = '9KG PAPER';
...