Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sequelize:从多个列中选择不同的字段值_Javascript_Mysql_Sequelize.js - Fatal编程技术网

Javascript Sequelize:从多个列中选择不同的字段值

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: [

我正在使用sequelize和mysql2,需要从多个列中选择所有不同的值。 例如,我有一个“标题”和一个“位置”列

目前:

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']})
。干杯!