代码之家  ›  专栏  ›  技术社区  ›  nonopolarity

在sql中,我们可以使用union来合并两个表。有什么不同的方法来做“交集”?

  •  2
  • nonopolarity  · 技术社区  · 14 年前

    在sql中,有一个运算符来“联合”两个表。在一次采访中,我被告知,比如一张桌子只有一个字段,里面有1,2,7,8,另一张桌子也只有一个字段,里面有2,7,我怎么才能得到交叉口。一开始我很震惊,因为我从来没有这样看。

    后来,我发现它实际上是一个“连接”(内部连接),这只是

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

    (尽管“join”这个名字更像是“union”而不是“intersect”)

    另一个解决办法似乎是

    select * from t1 INTERSECT select * from t2
    

    但是mysql不支持它。除了这两种方法外,有没有不同的方法得到交叉点?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Mark Byers    14 年前

    这个 page 解释如何在mysql中实现intersect和minus。要实现intersect,应使用内部连接:

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

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

        2
  •  0
  •   Andomar    14 年前

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

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