0

所以我试图找到提供红色部分和绿色部分的供应商的 sids。

这是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 中实现它,任何建议表示赞赏

4

2 回答 2

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颜色为redgreen的行。您希望应用的相交操作的种类。

就概念而言,我会建议(或我所知道的)UNION并且INTERSECTION应该在处理不同的表时应用。不应该在同一张表上进行操作。

假设你有两张桌子AB,那么你应该申请UNIONINTERSECTION不是在同一张桌子上。也就是说,如果您要查询同一张表A,并且在同一列上,那么您可以使用ANDorOR运算符。

记下上述内容,您可以通过AND.

于 2013-11-13T05:14:04.953 回答
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

(我只是把它放在一起,但至少应该很接近)

于 2013-11-13T04:35:45.130 回答