이것은 내 질문입니다.
-- 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
'MySql' 카테고리의 다른 글
MySQL codeigniter에서 양식 입력 상자의 값을 얻는 방법 (0) | 2020.12.08 |
---|---|
MySQL CodeIgniter Where and like SQL 쿼리 문 (0) | 2020.12.08 |
MySQL 수신 알림 동등한 (0) | 2020.12.07 |
MySQL 오류 : 대부분의 미들웨어 (예 : json)는 더 이상 Express에 번들로 제공되지 않으며 별도로 설치해야합니다. 참조하십시오 (0) | 2020.12.07 |
MySQL 양식 제출 후 페이지로 PHP 반환 (0) | 2020.12.07 |
댓글