美好的一天,

我有4个表要加入。现在我想根据交易类型获取每个交易的详细信息。如果

交易表

id |     type    |  source_id
 1   'product'         1
 2   'reservation'     1
 3   'service'         1


产品表

 id | Name
  1 | product 1


预订表

 id | reservation name        | other details
  1 |  some reservation name  | ------


服务表

 id | Service Name            | Other details
  1 | House Cleaning Service  | ------------


这是我想要的桌子

id |     type    |  source_id  | product_name  | reservation_name | service name
 1   'product'         1         product 1           null              null
 2   'reservation'     1             null      some reservation name   null
 3   'service'         1            null             null              House Cleaning Service


目前我最疯狂的猜测是

select a.id,a.type,a.source_id,b.product_name,c.reservation_name,d.service_name
from transaction as a
left join product_table as b on a.source_id = b.id
left join reservation_table as c on a.source_id = c.id
left join services_table as d on a.source_id = d.id


而且我确定它不会100%:D

有没有一种方法可以添加条件,如果'type'列='product',那么它只能从products表中提取?

最佳答案

您可以尝试使用CASE指令,如下所示:

select a.id,a.type,a.source_id,
       CASE a.source_id
           WHEN 'product'  THEN b.product_name
           else  null
       END ,
       CASE a.source_id
           WHEN 'reservation'  THEN c.reservation_name
           else  null
       END ,
       CASE a.source_id
           WHEN 'service'  THEN d.service_name
           else  null
       END
from transaction as a
left join product_table as b on a.source_id = b.id
left join reservation_table as c on a.source_id = c.id
left join services_table as d on a.source_id = d.id

关于mysql - 如何在mysql上添加条件以获得基于列值的不同表上的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49854713/

10-12 17:02