[SQL] SQL : 교차와 구문 오류?
SQLSQL : 교차와 구문 오류?
이것은 내 쿼리입니다 :
-- 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");
이 오류입니다 :
내가 뭘 잘못하고 있죠?
이 스키마입니다 :
공급자 (SID : 정수, SNAME : 문자열, 주소 문자열)
부품 (PID : 정수, PNAME : 문자열, 색상 : 문자열)
카탈로그 (SID : 정수, PID : 정수 비용 : 실제)
대담 = 기본 키
해결법
-
==============================
1.당신이 사용하고있는 것으로 나타 MySQL은, 인터 섹트 구문을 지원하지 않습니다. 당신은 그것을 다른 방법으로 해결해야 할 것입니다.
당신이 사용하고있는 것으로 나타 MySQL은, 인터 섹트 구문을 지원하지 않습니다. 당신은 그것을 다른 방법으로 해결해야 할 것입니다.
이 경우, 사소한 - 우리는 모든 공급 업체의 목록이 필요하다 제공하는 "녹색"과 부품 자체는 관련이 경우 우리는 아주 쉽게 해결할 수 있도록 쿼리 파트 - 일부는보고 귀찮게하지 않습니다의 "빨간색" 이 같은 :
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에 의해 제공되는 솔루션 가입에 봐 (내가 BTW 선호 심지어 RDBMS는 것 실제로 제공 교차하는 경우 기본적으로).
-
==============================
2.아무것도, MySQL은 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);
이 쿼리는 확실히 더 나은 기록 할 수 있지만, 그 교차가 아니라 단지 내부, 당신은 자동으로 다른에 하나를 변환 할 수있는 선택 별개로 가입 보여주는 것입니다.
-
==============================
3.이것은 당신이 원하는 일을해야한다 :
이것은 당신이 원하는 일을해야한다 :
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"
-
==============================
4.MySQL의에서 INTERSECT를 사용하기 위해 또 다른 해결책은 IN 절을 사용하는 것입니다. 문제 : "물론 ID의 2009 년 가을에서 제공되는 코스를 찾아 2010 년 봄 "
MySQL의에서 INTERSECT를 사용하기 위해 또 다른 해결책은 IN 절을 사용하는 것입니다. 문제 : "물론 ID의 2009 년 가을에서 제공되는 코스를 찾아 2010 년 봄 "
//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);
당신이 더 많은 IN 절에 필요한 경우 Google에서 검색하시기 바랍니다.
from https://stackoverflow.com/questions/2302873/sql-syntax-error-with-intersect by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 제약 조건 : 날짜 A는 날짜 B 전입니다 - 어떻게? (0) | 2020.07.14 |
---|---|
[SQL] 어떻게 오라클 MD5 해시 함수를 호출하는 방법? (0) | 2020.07.13 |
[SQL] MySQL의 GROUP BY와 리턴 수 0 (0) | 2020.07.13 |
[SQL] 지정한 캐스트가 검색 중 SCOPE_IDENTITY 동안 유효하지 않습니다 (0) | 2020.07.13 |
[SQL] SQL 빼기 정확히 년 (0) | 2020.07.13 |