본문 바로가기
MySql

MySQL SQL : intersect 구문 오류?

by 베이스 공부 2020. 12. 7.
반응형

이것은 내 질문입니다.

-- 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) : 오류가 있습니다. 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 6 행의 Catalog.sid = Sup에서 카탈로그에 가입하십시오.

내가 도대체 ​​뭘 잘못하고있는 겁니까?

이것은 스키마입니다.

공급자 ( sid : 정수 , sname : 문자열, 주소 문자열)

부품 ( 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 문제라고 생각하지 않습니다. Vinko Vrsalovic에서 제공하는 JOIN 솔루션에서 INTERSECT 를 에뮬레이트하기위한 일반적인 솔루션을 살펴보십시오 (RDBMS가 실제로 를 제공하더라도 선호합니다. 기본적으로 INTERSECT ).

 

참조 페이지 https://stackoverflow.com/questions/2302873

 

 

반응형

댓글