2015-05-30 35 views
2

我有三個表:電子郵件,customer_newcustomers_old。 現在電子郵件桌子上有一個名爲包含或場。
所以如果包含那麼我想從customer_new表從其他customer_old表中提取列。如何在JOIN語句中使用CASE根據條件連接兩個表?

爲此,我下面的MySQL查詢製成:

SELECT email.*, 
CASE email.`type` 
    WHEN 1 THEN customer_old.name 
    ELSE customer_new.name 
END AS customer_name 
LEFT JOIN 
CASE email.`type` 
    WHEN 0 THEN customer_new ON email.customer_id = customer_new.id 
    ELSE customer_old ON email.customer_id = customer_old.id 
END 
FROM email 

現在,當我運行此查詢的MySQL總是拋出錯誤。
有人可以通過基於條件的CASE語句解決我關於連接兩個表的問題嗎?

在此先感謝。

+0

你能告訴使用它的一個例子嗎? – Ankit

回答

3

請嘗試以下查詢。

SELECT email . * , IF(email.type = '1', customer_old.name, customer_new.name) AS name 
FROM email 
LEFT JOIN customer_old ON (customer_old.id = email.customer_id) 
LEFT JOIN customer_new ON (customer_new.id = email.customer_id) 
0
select email.*, 
CASE email.type 
    when 1 then customer_old.name 
    else customer_new.name 
    end as filteredname 
from email,customer_new,customer_old 
where 
    customer_new.id=email.id 
and 
    customer_old.id=email.id; 

您可以使用左側加入到優化執行。

0

一種替代,

SELECT * FROM email 
LEFT JOIN customer_new AS customer ON email.customer_id = customer.id 
WHERE email.type = 0 

UNION 

SELECT * FROM email 
LEFT JOIN customer_old AS customer ON email.customer_id = customer.id 
WHERE email.type = 1