Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们如何在mysql中实现交集和并集?_Mysql_Sql_Database_Database Design - Fatal编程技术网

我们如何在mysql中实现交集和并集?

我们如何在mysql中实现交集和并集?,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,因此,我试图找到供应红色部件和绿色部件的供应商的小岛屿发展中国家 下面是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' ); 但是

因此,我试图找到供应红色部件和绿色部件的供应商的小岛屿发展中国家

下面是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中实现它,任何建议都可以使用两个派生表:

 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

(我刚刚把它拼凑起来,但至少应该很接近)

为什么要这么复杂?试试这个,希望这个能满足你的需要

SELECT DISTINCT C.sid
FROM Catalog C, Parts P
WHERE C.pid = P.pid AND P.color  = 'red' AND P.color = 'green'
这将使您
加入这两个表,并
选择颜色为红色和绿色的行。您希望应用的一种相交操作

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

假设您有两个表
A
B
,那么您可以不在同一个表上应用
UNION
INTERSECTION
。也就是说,如果查询的是同一个表
A
,并且在同一列上,则可以选择
运算符


记下上面的内容,您可以通过执行

来实现这一点,如果您想了解MySQL的联合和交集,请阅读