首页 > 解决方案 > 在 SQL 中使用 Intersect 和子查询时无法获得输出

问题描述

问题:

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

问题:

对于这个问题,需要使用 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):

没有返回输出。


有关更多详细信息,请参阅数据库架构(主键以粗体显示)。

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

标签: sqlsubqueryintersect

解决方案


MySQL 不支持INTERSECT运算符。使用UNION运算符,使用运算符时适用相同的规则UNIONhttps://www.w3schools.com/sql/sql_union.asp

使用联合

(
  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'

推荐阅读