在 SQL 中将 Intersect 与子查询一起使用时无法获得输出

Cannot get output when using Intersect along with a subquery in SQL

烦恼:

无法获得输出,意味着肯定无法获得正确的输出。

问题:

这道题需要用到相交算子。需要找到类型为 '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):

没有返回输出。


See database schema for more details (Primary Keys are in bold).

使用了未知的 DBMS。表现得像 PostgreSQL 而不是 mysql

不要为 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';

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'