2012-11-12 30 views
-1

所以,我試過瀏覽現有的搜索結果,但我仍然感到困惑。希望有人能幫助。我有3個表,A(3列),B(2列)和C(2列),我需要根據A1列中的列C1獲取值。基於null的條件內連接

因此,如果A1中的值爲NULL,那麼'NONE'並且簡單地與C2中的行連接並獲得C1的值。

但是,如果A1中的值不爲NULL,則將該值與B2中的行匹配,然後將B1的值與C2匹配,從而得到C1的值。

我該如何去實現這樣的,我明白有內在和左連接,但它只是不會出來的權利。

下面是一個示例數據。

Table - A 

+--------+----+----+ 
| A1  | A2 | A3 | 
+--------+----+----+ 
| Cake | 22 | X | 
| (null) | 20 | Y | 
| Butter | 30 | Z | 
+--------+----+----+ 

Table - B 

+-----+--------+ 
| B1 | B2  | 
+-----+--------+ 
| EAT | Cake | 
| USE | Oil | 
| PRO | Butter | 
+-----+--------+ 

Table - C 

+-----+--------+ 
| C1 | C2  | 
+-----+--------+ 
| 100 | EAT | 
| 200 | USE | 
| 999 | NONE | 
| 300 | PRO | 
+-----+--------+ 

任何幫助非常感謝。

+5

歡迎來到StackOverflow。幫助我們幫助你。你試過什麼了?你使用的是哪個數據庫? –

+0

使用甲骨文,我試過的情況,當列是Null然後'N/A和另一種情況是不是NULL然後column_name結束= B2,但它不會返回正確的結果。 – user1819085

回答

2

查詢:

SELECT * FROM 
( SELECT a1,c1 FROM a,b,c 
      WHERE a.a1=b.b2 AND b.b1=c.c2 
    UNION 
    SELECT b2,c1 FROM b JOIN c on b1=c2 
) X 
UNION 
SELECT a1,c1 FROM a,c WHERE a1 IS NULL AND c2='NONE'; 

我獲得 A1和C1,因爲C1值可能是混亂的,這區別開來。如果你想按給定的順序給出c1值,那麼請儘快通知,儘管該查詢可能有點困難。

+0

所以,最終的答案將是從c1 - 100,999,300 – user1819085

+0

的值我必須說,你的答案有用,但我並不想使用聯盟。所以,我堅持並找到了適合我的解決方案。即選擇c1 from(從A選擇A1)x內部連接C當x.A1爲null時,則'NONE'else(從B選擇B1,其中B2 = A1)end = C.C2 – user1819085

0

找到適合我的解決方案,Nicole的答案也是正確的。

select c1 from (select A1 from A)x 
inner join C on case when x.A1 is null then 'NONE' 
       else (Select B1 from B where B2 = A1) 
       end = C.C2