2014-03-28 50 views
0

我有此查詢JOIN,的MySQL WITH CASE

SELECT 
table1.*, 
CASE 1 
WHEN 1 THEN table2.t2 
WHEN 2 THEN table3.t3 
END AS t_value 

FROM table1 

CASE 1 
WHEN 1 THEN LEFT JOIN table2 ON table1.id = table2.table1_id 
WHEN 2 THEN LEFT JOIN table3 ON table1.id = table3.table1_id 
END 

我有3個不同的表,表1是在基臺和我需要加入其他表中的一個(其決定與的情況下)

+1

將2個SELECT和2個結果集合在一起會更容易嗎? –

+0

不,工會的結果可能不是他正在尋找,但我看到這裏使用動態查詢。即根據條件存儲你的表名加入變量,並在加入時使用該變量。 – Rahul

+0

您正在將'table1'加入'table1',所以當條件1爲真時,您有:'SELECT table1。*,table2.t2 FROM table1 LEFT JOIN table1 table2 ON table1.id = table2.table1_id'。所以看起來你正在用'table2'或'table3'的別名加入'table1'。那是你的意思嗎? – Tony

回答

0

您可以嘗試動態查詢類似下面(不準確之一,但樣本)

declare @tablename varchar(30) 
declare @query varchar(500) 

if(condition = 1) 
set @tablename = table2.t2 
else 
set @tablename = table3.t3 

set @query = 'SELECT 
table1.* 
FROM table1 
join' 

set @query = concat(@query,@tablename) 

sp_executesql @query 
+0

其實這個條件並不是預定義的,它將根據當前行(例如「table1.status = 0」)。 –

0

如果只有1場考慮,這樣的事情(我不是一個MySQL用戶)? :

SELECT 
    table1.*, 
    CASE (row_condition) 
    WHEN 1 THEN (SELECT table2.t2 FROM table1 t1 
        LEFT JOIN table2 ON t1.id = table2.table1_id) 
    WHEN 2 THEN (SELECT table3.t3 FROM table1 t1 
        LEFT JOIN table3 ON t1.id = table3.table1_id) 
    END AS t_value 
FROM table1 

您可能需要返工的連接,考慮是否返回1行或更多的NULL等的情況下,(因此使用限制1,在每個子選擇結束),「COALESCE」