这是我的查询:

-- Sids of suppliers who supply a green part AND a red part
(SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Parts.color = "red")
INTERSECT
(SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Parts.color = "green");

这是错误:

错误1064(42000):您的SQL语法中有错误;检查与您的MySQL Server版本相对应的手册,以获取合适的语法在“ Intersect”附近使用(Select select.sid.sid catalog on Catalog.sid = sup sup sup sup sup sup sup sup of 6 line 6上。

我究竟做错了什么?

这是模式:

供应商(SID:整数, ,name:字符串,地址字符串)

部分(PID:整数, ,pname:字符串,颜色:字符串)

目录(SID:整数,PID:整数, ,成本:真实)

大胆的 =主键

有帮助吗?

解决方案

您似乎正在使用的MySQL不支持 INTERSECT 句法。您将不得不另一种方式解决。

在这种情况下,这是微不足道的 - 我们只需要提供某些部分“绿色”和“红色”的所有供应商的列表 - 您的查询不会理会自己是否相关,因此我们可以很容易地解决它像这样:

SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Parts.color IN ('red', 'green')
GROUP BY Suppliers.sid
HAVING COUNT(DISTINCT Parts.color) = 2

就个人而言,我不认为原始查询是典型的 INTERSECT 问题。看一下 JOIN Vinko Vrsalovic提供的解决方案用于仿真 INTERSECT (即使RDBMS实际上会提供,我也会更喜欢 INTERSECT 本地)。

其他提示

没什么,mySQL没有Intersect关键字。您可以将其重写为内部联接:

SELECT DISTINCT sid FROM
(SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Parts.color = "red") a
INNER JOIN
(SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Parts.color = "green") b
ON (a.sid = b.sid);

这个查询肯定可以更好地编写,但这是为了证明Intersect只是一个内在的连接,您可以自动将一个转换为另一个。

这应该做您想做的事:

SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
INNER JOIN Parts AS parts1 ON parts1.pid = Catalog.pid AND parts1.color = "red"
INNER JOIN Parts AS parts2 ON parts2.pid = Catalog.pid AND parts2.color = "green"

为了使用的另一个解决方案 相交 在mysql中是使用 条款。问题: “查找2009年秋季和2010年春季提供的课程ID”

//DML sample
(select course_id
from section
where semester = ‘Fall’ and year = ‘2009’)
intersect
(select course_id
from section
where semester = ‘Spring’ and year = ‘2010’);

在mysql中:

select distinct course_id
from section
where semester = 'Fall' and year= 2009 and
course_id in (select course_id
from section
where semester = 'Spring' and year= 2010);

如果您需要更多 条款,请在Google上搜索。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top