簡體   English   中英

MySQL根據字段值加入一個不同的表

[英]MySQL LEFT JOIN a different table based on a field value

我知道類似的問題已經提出過幾次,但似乎所有這些都與基於特定字段值的字段值更改有關。 我實際上想基於每個記錄的字段值加入一個完全不同的表。

我認為這可以通過單個查詢來實現,但是由於聯接表可能會更改每條記錄,因此我不確定。

為了澄清,我有四個表; 我試圖在一個查詢中加入其中的三個。 但是,根據每個記錄字段中的值,第三個表可以是兩個表之一。

我可以想象它看起來像這樣,但是沒有用。

SELECT crm_deal . * , crm_deal_step.sort_order, COALESCE( CONCAT_WS(' ',crm_lead.first_name, crm_lead.last_name),CONCAT_WS(' ',customer.firstname, customer.lastname) ) AS contact_full_name
FROM  `crm_deal`
IF( crm_deal.deal_for = 'lead', LEFT JOIN crm_lead ON crm_deal.deal_for_id = crm_lead.lead_id, LEFT JOIN customer ON crm_deal.deal_for_id = customer.customer_id)
LEFT JOIN crm_deal_step ON crm_deal.deal_step_id = crm_deal_step.deal_step_id

我靠近嗎? 有可能還是我需要做一個php循環並為每條記錄運行第二個查詢?

您不能在選擇陳述中使用if陳述。 但是您可以嘗試以下操作:

    SELECT crm_deal . * , crm_deal_step.sort_order, 
CASE WHEN crm_lead.first_name is not null AND
          crm_lead.last_name is not null
          THEN crm_lead.first_name+ ' '+crm_lead.last_name
          ELSE customer.firstname +' '+ customer.lastname
          END as contact_full_name
    FROM  `crm_deal`
    LEFT JOIN crm_lead ON crm_deal.deal_for_id = crm_lead.lead_id AND crm_deal.deal_for = 'lead' 
    LEFT JOIN customer ON crm_deal.deal_for_id = customer.customer_id AND crm_deal.deal_for <> 'lead' 
    LEFT JOIN crm_deal_step ON crm_deal.deal_step_id = crm_deal_step.deal_step_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM