从表

时间:2018-02-15 21:27:13

标签: mysql sequelize.js

我正在尝试进行IN查询,但我查询的字段不是表的元素。它是硬编码的。

await models.users.findOne({
  where: {
    id: 12,
    2: {$in: [1, 2, 3]}
  }
});

问题是,sequelize将表名放在我的字段的开头。

WHERE `users`.`2` IN (1, 2, 3) 

由于我的表格中没有字段 2 ,因此会抛出"未知列' users.2'在where子句"

实际上,这是我需要的,并且在本机sql中工作:

WHERE 2 IN (1, 2, 3) 

更新

为了更好地解释我正在编写整个SQL:

    SELECT count(`users`.`id`) AS `count`
    FROM `users` AS `users`
      INNER JOIN `payment_log` AS `succeed_payment`
        ON `users`.`id` = `succeed_payment`.`user_id` AND `succeed_payment`.`state` = 'success'
      LEFT OUTER JOIN `user_profile` AS `profile` ON `users`.`id` = `profile`.`user_id` AND `profile`.`state` = 'submitted'
    WHERE
      `users`.`country` = 'BLR'
      AND (`users`.`kyc_state` IN ('prepared', 'applicant_created', 'consider') OR `users`.`kyc_state` IS NULL)
    GROUP BY `users`.`id`
    HAVING
      1 IN ((SELECT tag_id
             FROM user_tags UT
             WHERE users.id = UT.user_id)) AND
      2 IN ((SELECT tag_id
             FROM user_tags UT
             WHERE users.id = UT.user_id));

1和2来自URL查询。我正在检查客户是否有这些标签。

不幸的是,sequelize会向我的查询添加反引号并将其返回到:

  HAVING
    `1` IN ((SELECT tag_id
             FROM user_tags UT
             WHERE users.id = UT.user_id)) AND
    `2` IN ((SELECT tag_id
             FROM user_tags UT
             WHERE users.id = UT.user_id));

在这种情况下,我收到了#34;未知的第1列和第34页;错误

1 个答案:

答案 0 :(得分:1)

你可以通过以下方式实现这一目标:

where : {
    '$2$' : {$in: [1, 2, 3]}
}