【问题标题】:What can I replace INTERSECT with in SQL Server 2000?在 SQL Server 2000 中,我可以用什么替换 INTERSECT?
【发布时间】:2017-07-30 22:25:18
【问题描述】:

我使用 SQL Server 2000,我需要使用“相交”,但使用这个 SQL Server 版本我不能 - 那么我应该使用什么来在两个表之间建立交集?

【问题讨论】:

  • 纯粹出于好奇,您为什么还在使用 SQL Server 2000?
  • 您是否尝试过使用 INNER JOIN?
  • EXISTS 可能就是你要找的东西..
  • 您可能会使用更新版本的 SQL Server .....这个已经过时且不受支持.....
  • 我必须使用 sql sever 2000,因为我的发起人问我别无选择,而且在 win xp 下 hhhh 对于内部连接,有人告诉我,但它不起作用,请给我一个例子。我有两个表 s1 和 s2 我必须有它们之间的交集

标签: sql sql-server sql-server-2000


【解决方案1】:

Intersect 获取两个表中的匹配结果,比较查询返回的所有列,相交的两边必须相同。

我相信这两个都将在 2000 年发挥作用,但我对第一个并不乐观。第一个是首选,因为它不必执行不同的排序。您需要将“*”替换为您想要包含的列,并且需要将所有这些列分别放在 WHERE/ON 子句中。

  1. SELECT *
    FROM s1
    WHERE EXISTS 
    (
    SELECT 1
    FROM s2
    WHERE s1.Col1 = s2.Col1
    --All columns included here
    AND s1.ColN = s2.ColN
    )
    
  2. SELECT DISTINCT s1.*
    FROM s1
    INNER JOIN s2
    ON s1.Col1 = s2.Col1
    --All columns included here
    AND s1.ColN = s2.ColN
    

【讨论】:

  • 他们给出了相同的结果,但是
  • 他们给出相同的结果,但 'SELECT s1.mat FROM s1 INNER JOIN s2 ON s1.mat = s2.mat and s1.sex = s2.sex and s1.sauv = s2.sauv and s1 .anet = s2.anet 和 s1.ocode = s2.ocode ' 和 'SELECT s1.mat FROM s1 INNER JOIN s2 ON s1.mat = s2.mat ' 没有给出相同的结果。所以我应该精确所有列存在于表 s1 和 s2 中吗?谢谢你的回答@Wes H
  • Intersect 比较结果集中的所有列。您需要通过列出您的连接/位置中的每一列来执行相同的操作。请注意,如果您使用的是连接方法并且有超过 1 个匹配项,您将得到重复项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 2011-01-31
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多