在SQL中使用Intersect和子查询时无法获得输出

时间:2018-05-06 04:21:48

标签: sql subquery 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):

没有输出。

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

使用了未知的DBMS。行为类似于PostgreSQL而非mysql

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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'