2013-11-13 4 views
0

Так что я пытаюсь найти поставщиков поставщиков, которые поставляют красную часть и зеленую часть.Как реализовать пересечение и объединение в mysql?

Вот SQL-запрос

SELECT DISTINCT C.sid 
FROM Catalog C, Parts P 
WHERE C.pid = P.pid AND P.color = 'red' 
INTERSECT 
( SELECT DISTINCT C.sid 
    FROM Catalog C1,Parts P1 
    WHERE C1.pid = P1.pid AND P1.color = 'green' 
); 

, но я с трудом его реализации в MySQL, любые предложения оценили

ответ

0

Просто используйте две производные таблицы:

select 
    t1.sid 
    from 
    (SELECT DISTINCT C.sid FROM Catalog C, Parts P WHERE C.pid = P.pid AND P.color = 'red') t1 
    inner join 
    (SELECT DISTINCT C.sid FROM Catalog C,Parts P WHERE C.pid = P.pid AND P.color = 'green') T2 
    on t1.sid = t2.sid 

(я просто бросил это вместе, но должно быть, по крайней мере, должно быть близко)

0

Зачем идти на такие сложный? Попробуйте это, возможно, эту работу для вашей потребности

SELECT DISTINCT C.sid 
FROM Catalog C, Parts P 
WHERE C.pid = P.pid AND P.color = 'red' AND P.color = 'green' 

Это даст вам join как таблиц и будет SELECT строки, в которых цвет либо красного и зеленый. Вид операции пересечения, которую вы хотите применить.

Что касается концепции, то я хотел бы предложить (или то, что я знаю) UNION и INTERSECTION следует применять при работе с различными таблицами. Его нельзя использовать для работы над той же таблицей.

Предположим, у вас есть две таблицы A и B, то вы можете следует применять UNION и INTERSECTION не на том же столе. То есть, если вы запрашиваете одну и ту же таблицу A, и по тому же столбцу, то вы можете обратиться за операторами AND или OR.

Записывая вышесказанное, вы можете достичь этого, выполнив AND.

+0

И если вы хотите знать UNION и INTERSECTION для MySQL, тогда прочитайте [здесь] (http://lists.mysql.com/mysql/92050) –

Смежные вопросы