SQL条件JOIN(内部或外部)

时间:2010-11-23 17:39:27

标签: sql join

我想知道在选择要执行的连接时是否可以执行条件语句。我的意思的一个例子可能是:

SELECT * FROM Table1
IF (TRUE) THEN INNER JOIN
ELSE (FALSE) THEN OUTER JOIN
END
Table2 ON (SOME CONDITION)

这显然不起作用,但我认为它更好地说明了我的问题。

4 个答案:

答案 0 :(得分:4)

这假设您的内部和外部

都有相同的列

外部联接当然包括内部联接:唯一的区别是如何处理不匹配的行,可以在WHERE子句中对其进行排序

SELECT
   col1, col2
FROM
   Table1
   LEFT OUTER JOIN
   Table2 ON ... (SOME CONDITION)
WHERE
   (conditional = true AND table2.key IS NOT NULL)
   OR
   (conditional = false AND table2.key IS NULL)

无法保证OR的性能

答案 1 :(得分:2)

不,但您可以做的是创建两个连接,然后使用条件来选择从某个输出列中提取数据的那个...

Select Case When [Some boolean condition]
        Then A.ColumnName
        Else B.ColumnName End as OutputColumnName
   From Table 
     Left Join OneTable As A
        On [Join conditions]
     Left Join OtherTable As B
        On [Join conditions]

这可以修改为以相同的方式解决您的特定问题[内部,外部]

  Select Case When [Some boolean condition]
        Then A.ColumnName
        Else B.ColumnName End as OutputColumnName
   From Table 
     [Inner] Join TheTable As A
        On [Join conditions]
     Left [Outer] Join TheTable As B
        On [Join conditions]

答案 2 :(得分:0)

根本不清楚你期望什么回来。您是期望IF逐行工作,还是整个查询工作一次?

无论如何,你可以可能通过OUTER JOIN获得你想要的东西,然后用WHERE子句过滤结果。

答案 3 :(得分:0)

没有。如果有必要,您需要动态构建查询字符串,然后执行它。或者只是总是进行外连接,并根据条件选择在前端实际使用的列。没有更多信息,很难说在任何特定情况下哪个更有意义。