【发布时间】:2018-02-15 21:27:12
【问题描述】:
我正在尝试进行 IN 查询,但我正在查询的字段不是表的元素。它是硬编码的。
await models.users.findOne({
where: {
id: 12,
2: {$in: [1, 2, 3]}
}
});
问题是,sequelize 将表名放在我的字段的开头。
WHERE `users`.`2` IN (1, 2, 3)
由于我的表中没有字段 2,它会抛出“where 子句中的未知列 'users.2'”
其实这是我需要的,并且在原生 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));
在这种情况下,我收到“未知列 1”错误
【问题讨论】:
-
好问题,我不知道是否有内置支持,但是,您可以随时使用raw-queries
-
很遗憾,我不能使用 raw-query,这只是一个基本的查询示例。改变太大了。
-
不,这是一个非常不同的情况。
-
如果
2和[1,2,3]都不是来自表 - 为什么它在查询开头?那里where子句毫无意义……
标签: mysql sequelize.js