Javascript Sequelize:从多个列中选择不同的字段值
我正在使用sequelize和mysql2,需要从多个列中选择所有不同的值。 例如,我有一个“标题”和一个“位置”列 目前:Javascript Sequelize:从多个列中选择不同的字段值,javascript,mysql,sequelize.js,Javascript,Mysql,Sequelize.js,我正在使用sequelize和mysql2,需要从多个列中选择所有不同的值。 例如,我有一个“标题”和一个“位置”列 目前: Job.findAll({ attributes: [ [Sequelize.fn('DISTINCT', Sequelize.col('title')), 'title'] ] }) 工作,返回所有不同的职务。但是如果我为location列添加第二行,我会得到一个语法错误 Job.findAll({ attributes: [
Job.findAll({
attributes: [
[Sequelize.fn('DISTINCT', Sequelize.col('title')), 'title']
]
})
工作,返回所有不同的职务。但是如果我为location列添加第二行,我会得到一个语法错误
Job.findAll({
attributes: [
[Sequelize.fn('DISTINCT', Sequelize.col('title')), 'title'],
[Sequelize.fn('DISTINCT', Sequelize.col('location')), 'location']
]
})
至少从我在文档中读到的内容来看,这感觉应该是可行的——但我对sequelize并没有太多的经验或信心,所以任何帮助都将不胜感激
谢谢我还没有找到一种不那么老套的方法,但您可以利用DISTINCT实际上不是一个函数,而是一个语句,并且始终对整个选定列集进行操作:
Job.findAll({
attributes: [
[Sequelize.fn('DISTINCT', Sequelize.col('title')), 'title'],
'location'
]
})
将生成类似于
SELECT DISTINCT(`title`) AS `title`, `location` FROM `Jobs`;
但由于DISTINCT不是一个函数,因此它实际上与
SELECT DISTINCT (`title`) AS `title`, `location` FROM `Jobs`;
SELECT DISTINCT `title`, `location` FROM `Jobs`;
因为列名周围的括号是可选的,所以上面的查询与
SELECT DISTINCT (`title`) AS `title`, `location` FROM `Jobs`;
SELECT DISTINCT `title`, `location` FROM `Jobs`;
来源:(如果有人碰巧也需要,本文还讨论了PostgreSQL扩展上的DISTINCT)
请注意,如果Sequelize决定在生成SQL时更改函数的应用方式,这感觉非常粗糙,有点脆弱,可能会/可能会中断,但它在我使用的Sequelize版本(5.22.3)中工作。谢谢你的想法,但事实证明——至少对于我想做的事情,我把事情弄得太复杂了:下面似乎返回了一个两者都不同的列表:
Job.findAll({attributes:['title',location'],group:['title',location']})
。干杯!