mysql - 连接两个表时将 where 子句转换为 and 子句的 Sequelize

标签 mysql node.js sequelize.js

我有两个表CouponsLocationCoupons

Coupons
--------------
id

LocationCoupons
----------------
id
coupon_id
location_id

我想从 Coupons 中选择 LocationCoupons 中不存在的所有记录。
我可以通过编写如下所示的原始查询来获得所需的结果。

const [results, metadata] = await sequelize.query("
    SELECT c.id, c.coupon_code FROM coupons c 
    WHERE NOT EXISTS 
    (SELECT l.id FROM location_coupon_map l WHERE c.id = l.coupon_id)");

但是当我尝试对关联执行相同操作时,使用联接,传递的 where 子句正在转换 and

const coupons = await Coupon.findAll({
            include: {
                model: LocationCoupon,
                where: {
                    coupon_id: null
                },
                required: false,
                attributes: []
            },
            attributes: ["id", "coupon_code"]
        })

以上关联正在生成以下查询。

SELECT `Coupon`.`id`, `Coupon`.`coupon_code` FROM `coupons` AS `Coupon` 
LEFT OUTER JOIN `location_coupon_map` AS `LocationCoupons` 
ON `Coupon`.`id` = `LocationCoupons`.`coupon_id` 
AND `LocationCoupons`.`coupon_id` IS NULL;

虽然应该如此。

SELECT `Coupon`.`id`, `Coupon`.`coupon_code` FROM `coupons` AS `Coupon` 
LEFT OUTER JOIN `location_coupon_map` AS `LocationCoupons` 
ON `Coupon`.`id` = `LocationCoupons`.`coupon_id` 
WHERE `LocationCoupons`.`coupon_id` IS NULL;

我在这里遗漏了什么吗?

最佳答案

我修好了。 Sequelize 文档不太好。他们应该更好地描述所有可能的关联查询。

 const coupons = await Coupon.findAll({
            where: {
                "$LocationCoupons.coupon_id$": null
            },
            include: {
                model: LocationCoupon,
                attributes: []
            },
            attributes: ["id", "coupon_code"]
        })

现在生成的查询和结果符合预期。

SELECT `Coupon`.`id`, `Coupon`.`coupon_code` FROM `coupons` AS `Coupon` 
LEFT OUTER JOIN `location_coupon_map` AS `LocationCoupons` 
ON `Coupon`.`id` = `LocationCoupons`.`coupon_id` 
WHERE `LocationCoupons`.`coupon_id` IS NULL;

关于mysql - 连接两个表时将 where 子句转换为 and 子句的 Sequelize ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60539203/

相关文章:

mysql - 如何自动向表中插入一行?

javascript - Node Js 图片上传不工作

node.js - 在哪里存储一致的 JSON、Redis 或全局变量?

node.js - 如何在 Sequelize 中执行 "WHERE",但排除嵌套模型?

php - 在 Joomla 2.5 中获取当前用户访问级别

MySQL 从表中获取缺少的 ID

java - 如何为我的java应用程序+ mysql创建可安装的(从maven构建spring boot创建的jar)

node.js - Mongoose 可选的搜索查询参数?

node.js - 包含在 包含在 Sequelize 中

node.js - 如何使用 Sequelize 创建所需的 "BelongsTo"关联?