[英]Sequelize: Selecting distinct field values from multiple columns
我正在使用 sequelize 和 mysql2 并且需要从多个列中选择所有不同的值。 例如,我有一个“标题”和一个“位置”列。
目前这个:
Job.findAll({
attributes: [
[Sequelize.fn('DISTINCT', Sequelize.col('title')), 'title']
]
})
工作,返回所有不同的职位。 但是,如果我为位置列添加第二行,则会出现语法错误
Job.findAll({
attributes: [
[Sequelize.fn('DISTINCT', Sequelize.col('title')), 'title'],
[Sequelize.fn('DISTINCT', Sequelize.col('location')), 'location']
]
})
感觉它应该有效,至少从我在文档中读到的内容来看 - 但我对续集并不完全有经验或信心,所以任何帮助将不胜感激。
谢谢
我还没有找到一种不那么简单的方法,但是您可以利用 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`;
来源: https : //dzone.com/articles/sql-distinct-is-not-a-function (文章还谈到了 DISTINCT ON PostgreSQL 扩展,如果有人也需要的话)
请注意,如果 Sequelize 决定更改生成 SQL 时应用函数的方式,这感觉非常笨拙且有点脆弱,并且可能/可能会中断,但它在我使用的 Sequelize 版本 (5.22.3) 中有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.