需要为以下场景构建 mysql 查询



嗨,我需要为以下场景构建一个 MySQL 查询

我有像tbl_project、tbl_object1、tbl_object2、tbl_object3、tbl_object4 tbl_item这样的表格。在这里,我有 50 个条目tbl_project。

因为每个条目将具有唯一的列object_id其值为 1 或 2 或 3 或 4。如果object_id为 1,则该项目的对象详细信息将以 tbl_object1 为单位,同样,如果object_id为 2,则该项目的详细信息将以 tbl_object2 为单位,依此类推。

在各自的对象表(tbl_object1、tbl_object2、tbl_object3、tbl_object4(中,我有唯一的列item_id。对于独特的item_id,我们必须获取item_name,item_details。

因此,对于我所有的 50 个条目,其各自的对象数据来自任何对象表(tbl_object1、tbl_object2、tbl_object3、tbl_object4(,基于object_id,然后基于来自item_id tbl_item的项目数据基于相应对象表(tbl_object1或tbl_object2或tbl_object3或tbl_object4(。

你能帮帮我吗

你的第一项努力应该是修复你的数据模型。将数据分散在多个表中会使事情变得不必要的复杂和低效 - 正如您开始看到的那样。这四个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

最新更新