需要为下面的场景构建一个mysql查询

i5desfxk  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(357)

嗨,我需要为下面的场景构建一个mysql查询
我有像tbl\u project,tbl\u object1,tbl\u object2,tbl\u object3,tbl\u object4,tbl\u item这样的表。在这里,我有50个在tblèu项目的条目。
因为每个条目都有唯一的列对象id,其值为1、2、3或4。如果object\u id为1,则该项目的对象详细信息将在tbl\u object1中,同样,如果object\u id为2,则该项目的详细信息将在tbl\u object2中,依此类推。
在各自的对象表(tbl\u object1、tbl\u object2、tbl\u object3、tbl\u object4)中,我有唯一的列item\u id。对于唯一的item\u id,我们必须获取item\u name、item\u details。
因此,对于所有我的50个条目,其各自的对象数据来自基于对象标识的任何对象表(tbl_object1、tbl_object2、tbl_object3、tbl_object4),然后来自基于各自对象表(tbl_object1或tbl_object2或tbl_object3或tbl_object4)的各自项目标识的tbl_item。
你能帮帮我吗

jei2mxaa

jei2mxaa1#

您的第一项工作应该是修复数据模型。将数据分散到多个表上会使事情变得不必要、复杂和低效——正如您开始看到的那样。这四个 tbl_object* 应该在一个表中规范化表。
也就是说:你可以用多个 left join 学生:

select p.*, i.item_name, i.item_details
from tbl_project p
left join tbl_object1 o1 on p.object_id = 1
left join tbl_object2 o2 on p.object_id = 2
left join tbl_object3 o3 on p.object_id = 3
left join tbl_object4 o4 on p.object_id = 4
left join tbl_item i on i.item_id = coalesce(o1.item_id, o2.item_id, o3.item_id, o4.item_id)

如果要消除在相应对象表中不匹配的项目,可以添加以下内容 where 条款:

where i.item_id is not null

相关问题