MySQL根据字段值LEFT JOIN不同的表

标签 mysql sql select if-statement join

我知道类似的问题已经出现过几次,但似乎这些都与基于特定字段值的字段值变化有关。我实际上想根据每条记录的字段值连接一个完全不同的表。

我认为这可以通过单个查询实现,但由于连接表可能会更改我不确定的每条记录。

澄清一下,我有四个表;我正在尝试将其中三个加入到一个查询中。但是,第三个表可能是两个表之一,具体取决于每个记录字段中的值。

我想象它看起来像这样,但它不起作用。

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 循环并对每条记录运行第二个查询?

最佳答案

不能在 select 语句中使用 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

关于MySQL根据字段值LEFT JOIN不同的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29881625/

相关文章:

mysql - 选择多列的 max()

mysql - MySQL 中搜索查询中 'dd/dd/dd' 的正则表达式

mysql - 将两个 SELECT 语句组合成一个 JOIN

mysql - 如何在sql语句中执行逻辑

python:在 mysql 中将数据作为字符串添加会出现奇怪的错误

mysql - 使用 where 子句获取所有结果

php - 根据用户选择对我的查询进行排序

SQL 选择前几行的条件

MySQL查询嵌套where条件

javascript - 带图像的 Angular 选择