mysql 续集”分开:true”不适用于嵌套的include语句

z31licg0  于 2023-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(99)

我不能把“续集”分开:true”选项来处理嵌套的include语句。对于我的代码片段,我将删除大部分代码,并显示一个小例子,说明在我的大型查询中出现了什么问题。
背景:患者有许多场景,患者有许多特征。
使用不起作用的嵌套包含:

const scenario = await Scenario.findByPk(scenario_id, {
        include: [{
            model: Patient,
            attributes: [ 'name' ],
            required: true,
            include: [{
                model: Characteristic,
                separate: true,
            }]
        }]
    });

不嵌套include(工作并使用相同的表关联):

const scenario = await Patient.findByPk(1, {
        include: [{
            model: Characteristic,
            separate: true,
        }]
    });

导致问题的mysql查询部分如下:

Executing (default): SELECT `characteristic_id`, `type`, `value`, `patient_id` FROM `Characteristic` AS `Characteristic` WHERE `Characteristic`.`patient_id` IN (NULL);

如您所见,当嵌套include语句时,它将patient_id与null进行比较。这对我来说一点意义都没有。
我做错什么了吗?“单独”调用不应该嵌套吗?如果是这样的话,做大型查询的最佳方法是什么,没有单独的sequelize会生成一个非常复杂的list子查询inner joins,这会导致查询1100行json需要13秒。

bpzcxfmw

bpzcxfmw1#

我的问题是属性选项。如果你有一个属性数组只拉取某些列,并且你没有像这样在属性数组中包括父对象的主键:

attributes: [ 'primary key name' ],

则它将使用空外键搜索子对象并将返回空数组。

相关问题