【问题标题】:Conditional Join possible in SQL Server 2005?SQL Server 2005 中可以进行条件连接吗?
【发布时间】:2009-01-30 16:47:33
【问题描述】:

我需要编写一个选择查询,该查询根据条件(在本例中,基于其中一列中的值)连接表。我想做这样的事情:

SELECT *
  FROM TableA
       INNER JOIN TableB ON (TableA.Column1 = TableB.Column1 OR TableA.Column1 = 0) -- Does not work!

【问题讨论】:

  • 据我所知,条件连接是不可能的,但还有其他方法可以实现类似的结果。您能否更新您的问题以在示例中包含您想要实现的目标?
  • A.Col=0 上的 A INNER JOIN B 的预期结果是什么??
  • 具有预期结果的样本数据在这里会很棒。表定义会更好,但对于这样的问题可能不是必需的。

标签: sql sql-server


【解决方案1】:

我不确定您在做什么,但您似乎正在寻找外连接:

SELECT *
FROM TableA LEFT OUTER JOIN TableB ON TableA.Column1 = TableB.Column1
WHERE TableB.Column1 IS NOT NULL
   OR TableA.Column1 = 0

【讨论】:

  • 我刚刚写的完全相同的答案,只是更快。 :)
【解决方案2】:

这应该可以满足您的需要:

SELECT *
FROM TableA A
WHERE A.Column1 = 0
   OR EXISTS(
            SELECT B.Column1
            FROM TableB B
            WHERE B.Column1 = A.Column1
            );

【讨论】:

  • 这不会从 TableB 中选择任何列。
【解决方案3】:

如果您想要表 A 中的行和表 B 中的行,只需使用两个由 UNION 命令分隔的选择语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 2022-06-13
    • 2010-09-19
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多