题
这是我的查询:
-- 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上搜索。