복붙노트

[SQL] SQL : 교차와 구문 오류?

SQL

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");

이 오류입니다 :

내가 뭘 잘못하고 있죠?

이 스키마입니다 :

공급자 (SID : 정수, SNAME : 문자열, 주소 문자열)

부품 (PID : 정수, PNAME : 문자열, 색상 : 문자열)

카탈로그 (SID : 정수, PID : 정수 비용 : 실제)

대담 = 기본 키

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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에서 검색하시기 바랍니다.

  5. from https://stackoverflow.com/questions/2302873/sql-syntax-error-with-intersect by cc-by-sa and MIT license