用table1.column中引用的table [X]来对join1进行联接

时间:2018-11-27 21:54:31

标签: mysql sql node.js sequelize.js

所以我有

  • table1 =车辆
  • table2 = cars
  • table3 = motocycle
  • table4 =卡车...

在表1中,我有一列$environment,该列按上述表(表2 |表3 |表4 ...)的编号引用。我想列出表1中的所有车辆,并加入type中引用的表;但我发现,我发现唯一的困难是获取所有车辆并遍历所有车辆,并从type中指定的相应表中获取补充数据。

例如:

车辆:

type

汽车(类型1):

id(0)------------type(1)---------------name(dacia)

id(1)------------type(2)---------------name(porsche)

id(2)------------type(2)---------------name(hummer)

id(3)------------type(3)---------------name(kongo)

id(4)------------type(3)---------------name(renault)

卡车(类型2):

id(0)----------vehicleId(0)-------otherInfo(new)

摩托车(类型3):

id(0)----------vehicleId(1)-------otherInfo(used)

id(1)----------vehicleId(2)-------otherInfo(like_new)

查询结果:

id(0)----------vehicleId(3)-------otherInfo(old)

id(1)----------vehicleId(4)-------otherInfo(very_old)

2 个答案:

答案 0 :(得分:0)

您可以使用包含车辆类型条件的LEFT JOIN子句,然后使用CONCAT / COALESCE返回(唯一的)匹配值,如下所示:

select
    v.id,
    v.type,
    v.name,
    concat( 
        coalesce( c.otherInfo, ''), 
        coalesce( t.otherInfo, ''), 
        coalesce( m.otherInfo, '') 
    ) as otherInfo
from vehicules v
left join cars      c on c.vehiculeId = v.id and v.type = 1
left join trucks    t on t.vehiculeId = v.id and v.type = 2
left join motocycle m on m.vehiculeId = v.id and v.type = 3

答案 1 :(得分:0)

我认为您需要先阅读以下内容: Associations

这是定义两个模型/表之间的关系的方式,例如

  
      
  • 属于
  •   
  • 多对多
  •   
  • 有一个
  •   
  • 有很多
  •   

完成此操作后,便可以查询模型以获取期望的真实数据。例子

// Find all projects with a least one task where task.state === project.state
Project.findAll({
    include: [{
        model: Task
        // you can go nested too , as per your requirment        
    }]
})
  

这是使用sequelize.js时应该做的事情