在 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'
烦恼:
无法获得输出,意味着肯定无法获得正确的输出。
问题:
这道题需要用到相交算子。需要找到类型为 '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'