2010-07-21 71 views
0

當滿足某些條件時,我需要加入一個表,並且在滿足其他條件時LEFT加入它。由於我在MS CRM動態與過濾器,我不能使用UNIONSQL JOIN和LEFT在不同的條件下加入同一個表

SELECT stuff.stuffs 
    FROM MainTable  

JOINS othertable 
LEFT JOIN othertables 

LEFT JOIN TableX as X1 ON (Conditions1.1 = X1.1 
         AND MainTable.Type = 1)  
    JOIN TableX as X2 ON (Conditions2.2 = X2.2 
         AND MainTable.Type = 2) 
  • 如果我註釋掉X2部分,我得到了我從X1的部分並沒有什麼從X2需要。
  • 如果我左加入X2部分,我在X2中有額外的信息。
  • 如果我這樣離開它,我會從X2部分得到我需要的,但從X1中得不到什麼。

我嘗試了幾個變體,但我無法達到滿意的解決方案。

編輯:我原來的查詢是這樣:

SELECT stuff.stuffs 
    FROM MainTable 

(LEFT) JOIN TableX as X1 
     ON (Conditions1.1 = X1.1 
      AND MainTable.Type = 1)  
    OR 
     ON (Conditions2.2 = X2.2 
      AND MainTable.Type = 2) 

但如果是作爲左加入,我從X2 獲得額外的信息和JOIN給我從X1缺少信息,

+0

我們能否看到最終查詢?你需要的東西仍然不清楚。 – ErikE 2010-07-22 01:53:16

回答

1

實際需要的匹配是不是在OP清楚,但你可以嘗試這樣的:

Select stuff.stuffs 
From MainTable 
    Left Join TableX As X1 
     On (MainTable.Type = 1 And X1.1 = ...) 
      Or (MainTable.Type = 2 And X1.2 = ...) 

鑑於您添加到OP中的內容以及註釋中,是否從TableX中查找滿足條件或僅滿足條件之一的行仍不清楚。不過,爲了完整起見,這裏是兩個:

任一情況:我上面的原始解決方案和您添加到您的文章的解決方案。

一個也是唯一的一個條件:

Select stuff.stuffs 
From MainTable 
    Left Join TableX As X1 
     On X1.1 = ... 
    Left Join TableX As X2 
     On X2.2 = ... 
Where (MainTable.Type = 1 And X1.PK Is Not Null And X2.PK Is Null) 
    Or (MainTable.Type = 2 And X2.PK Is Not Null And X1.PK Is Null) 

什麼是從原來的職位缺少的是外鍵引用從TableX的到MainTable的任何概念。因此,通常我會想到類似於:

Select stuff.stuffs 
From MainTable 
    Left Join TableX As X1 
     On X1.FK = MainTable.PK 
    Left Join TableX As X2 
     On X2.FK = MainTable.PK 
Where (MainTable.Type = 1 And X1.Col1 = ... And X2.PK Is Null) 
    Or (MainTable.Type = 2 And X2.Col1 = ... And X1.PK Is Null) 
+0

這個解決方案給我從X2我額外的信息,我沒有。 一個JOIN,會從X1創建缺失的信息。 – Mashuu 2010-07-21 20:55:58

+0

@Mashuu - 請提供一些示例數據和示例輸出,以更好地說明您嘗試實現的內容。目前還不清楚你是否希望數據符合兩個條件,只有一個條件,條件等。 – Thomas 2010-07-21 21:18:36

+0

謝謝,使用One和One的變體,我(你)設法使它工作!我只需要在我的SELECT中添加一個簡單的CASE即可使所有工作都成功! – Mashuu 2010-07-21 21:57:21

1

我「M想你需要自行試試這個:

SELECT stuff.stuffs 
    FROM TABLEX x 
LEFT JOIN MAINTABLE mt1 ON mt.1 = x.1 
         AND mt.type = 1 
LEFT JOIN MAINTABLE mt2 ON mt.2 = x.2 
         AND mt.type = 2 
+0

我無法真正做到這一點,因爲我有9個其他連接,並在2我需要修復之前離開連接。 – Mashuu 2010-07-21 21:35:08

+0

@Mashuu:我們只能通過你提供的細節去做。 – 2010-07-21 21:45:00

+0

這是真的,我的道歉,我期待一個簡單的一行答案或我不知道的特殊連接屬性。謝謝你幫助我,非常感謝。 – Mashuu 2010-07-21 22:07:22

相關問題