2

在 SQL 中,有一个运算符可以“联合”两个表。在一次采访中,有人告诉我,假设一个表只有 1 个字段,其中包含 1、2、7、8,而另一个表也只有 1 个字段,其中包含 2 和 7,我如何获得交集。一开始我很震惊,因为我从来没有这样看。

后来发现其实是一个“Join”(内连接),也就是

select * from t1, t2 where t1.number = t2.number

(虽然“join”这个名字感觉更像是“union”而不是“intersect”)

另一个解决方案似乎是

select * from t1 INTERSECT select * from t2

但它在 MySQL 中不受支持。除了这两种方法之外,还有不同的方法来获得交集吗?

4

2 回答 2

2

本页解释了如何在 MySQL 中实现 INTERSECT 和 MINUS 要实现 INTERSECT,您应该使用内部连接:

SELECT t1.number
FROM t1
INNER JOIN t2
ON t1.number = t2.number

您的代码也这样做,但不建议再编写这样的连接。

于 2010-04-24T21:03:07.587 回答
0

相交只是一个内部连接。所以

select * from t1 INTERSECT select * from t2

可以为 MySQL 重写

select * 
from t1 
inner join t2
on t1.col1 = t2.col1
and t1.col2 = t2.col2
and t1.col3 = t2.col3
...
于 2010-04-24T21:04:27.890 回答