2010-11-23 146 views
4

我想知道是否有可能在选择要执行的连接时执行条件语句。举例来说,我的意思可能是这样的:SQL条件连接(内部或外部)

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

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

回答

0

这并不是一目了然,你期望得到回报。你期望IF如何在逐行的基础上工作,或者一次为整个查询?

无论如何,你可以可能得到你想要的与外部连接,然后用WHERE子句过滤结果。

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

+0

谢谢。您的解决方案也适合我。这似乎是如此简单明显的回顾;-) – 2011-03-18 22:48:11

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]