Это мой запрос:SQL: Синтаксическая ошибка с пересечением?
-- 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");
Это ошибка:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near "INTERSECT (SELECT Suppliers.sid FROM Suppliers JOIN Catalog ON Catalog.sid = Sup" on line 6.
Что я делаю неправильно?
Это схема:
Поставщики (SID: целочисленные, SNAME: строка, строка адреса)
части (PID: целочисленные, PNAME: строка, цвет: строка)
Каталог (с.и.д.: целое число, Pid: целое, стоимость: реальная)
полужирный = первичный ключ
Было бы интересно узнать, что быстрее, этот запрос или мой запрос - я думаю, что это происходит до того, что происходит быстрее, 2-го соединения или группы по операциям. – Hogan
@Hogan, * shrug *. Это зависит от очень многих вещей: индексов, какого движка, сколько строк, сколько памяти. enless list ... Если бы вопрос заключался в том, чтобы найти самое быстрое решение, я бы принял совершенно иной подход к ответу на это. На данный момент я вхожу в режим: как переписать стандартный SQL, чтобы получить эквивалентный результат в случае, если MySQL не поддерживает синтаксис. –
точка взята, я думаю, что я всегда в режиме того, что является самым быстрым, а не самым ясным. – Hogan