Javascript Sequelise创建了一个奇怪的查询
我有3张表Javascript Sequelise创建了一个奇怪的查询,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我有3张表城市、汽车、图像 我需要为城市/parent_id=21获取城市的汽车以及汽车的图像。(使用where子句根据排序号过滤图像) 我的原始查询是: SELECT `car`.`car_id`, `car`.`chassis_no`, `images`.`car_image_id` AS `images.car_image_id`, `images`.`directory` AS `images.directory`, `images`.`file_
城市、汽车、图像
我需要为城市/parent_id=21
获取城市的汽车以及汽车的图像。(使用where子句根据排序号过滤图像)
我的原始查询是:
SELECT
`car`.`car_id`,
`car`.`chassis_no`,
`images`.`car_image_id` AS `images.car_image_id`,
`images`.`directory` AS `images.directory`,
`images`.`file_name` AS `images.file_name`
FROM `car` AS `car`
INNER JOIN `city` AS `city` ON
`car`.`parent_id` = `city`.`id`
AND `city`.`parent_id` = 21
INNER JOIN `images` AS `images` ON
`car`.`car_id` = `images`.`car_id`
AND `images`.`sort_number` = 1
limit 0, 5;
explain SELECT
`car` .*,
`images`.`car_image_id` AS `images.car_image_id`,
`images`.`directory` AS `images.directory`,
`images`.`file_name` AS `images.file_name`
FROM
(
SELECT
`car`.`car_id`,
`car`.`chassis_no`
FROM
`car` AS `car`
INNER JOIN `city` AS `city` ON
`car`.`parent_id` = `city`.`id`
AND `city`.`parent_id` = 21
WHERE
(
SELECT
`car_id`
FROM
`images` AS `images`
WHERE
(`images`.`sort_number` = 1
AND `images`.`car_id` = `car`.`car_id`)
LIMIT 1 ) IS NOT NULL
LIMIT 0,
5) AS `car`
INNER JOIN `images` AS `images` ON
`car`.`car_id` = `images`.`car_id`
AND `images`.`sort_number` = 1;
Sequelise生成的查询如下:
SELECT
`car`.`car_id`,
`car`.`chassis_no`,
`images`.`car_image_id` AS `images.car_image_id`,
`images`.`directory` AS `images.directory`,
`images`.`file_name` AS `images.file_name`
FROM `car` AS `car`
INNER JOIN `city` AS `city` ON
`car`.`parent_id` = `city`.`id`
AND `city`.`parent_id` = 21
INNER JOIN `images` AS `images` ON
`car`.`car_id` = `images`.`car_id`
AND `images`.`sort_number` = 1
limit 0, 5;
explain SELECT
`car` .*,
`images`.`car_image_id` AS `images.car_image_id`,
`images`.`directory` AS `images.directory`,
`images`.`file_name` AS `images.file_name`
FROM
(
SELECT
`car`.`car_id`,
`car`.`chassis_no`
FROM
`car` AS `car`
INNER JOIN `city` AS `city` ON
`car`.`parent_id` = `city`.`id`
AND `city`.`parent_id` = 21
WHERE
(
SELECT
`car_id`
FROM
`images` AS `images`
WHERE
(`images`.`sort_number` = 1
AND `images`.`car_id` = `car`.`car_id`)
LIMIT 1 ) IS NOT NULL
LIMIT 0,
5) AS `car`
INNER JOIN `images` AS `images` ON
`car`.`car_id` = `images`.`car_id`
AND `images`.`sort_number` = 1;
执行explain显示sequelise查询不是很有效,而且在我看来,它确实看起来很奇怪,而不是平面连接。但这两个查询的结果是相同的
这是我的亲戚:
//Relations
city.hasMany(car, { foreignKey: 'parent_id', sourceKey: 'id' })
car.belongsTo(city, {
foreignKey: 'parent_id',
sourceKey: 'id'
})
car.hasMany(image, { foreignKey: 'car_id', sourceKey: 'car_id' })
image.belongsTo(car, { foreignKey: 'car_id', sourceKey: 'car_id' })
查询代码如下:
return this.findAll({
attributes: ['car_id', 'car_model'],
include: [
{
model: db.city,
required: true,
attributes: [],
where: { parent_id: 21 }
},
{
model: db.image,
required: true,
attributes: ['image_id', 'file_name'],
where: { sort_number: 1 }
}
],
offset: 0,
limit: 5
})
有没有办法让它像我上面提到的原始查询连接一样?我错过了什么?
Sequelise在生成更好的查询方面是否受到限制?
我应该使用原始查询函数自己编写连接吗?这是没有帮助的
请导游,我是新来的。抱歉发了这么长的邮件