拍续集之前
有几种方法可以解决,尽管子查询是您可以做到的方法之一。
我已经演示了在 where 子句中添加一个带有 max 函数的子查询。
让我们首先在简单的mysql中复制它
mysql> create table product (productId VARCHAR(200), docversion integer, name VARCHAR(200), price integer, location VARCHAR(200));
Query OK, 0 rows affected (1.01 sec)
mysql> insert into product(productID, docversion, name, price, location) VALUES('PID123', 0, 'Chair', 25, 'USA');
Query OK, 1 row affected (0.07 sec)
mysql> insert into product(productID, docversion, name, price, location) VALUES('PID123', 1, 'Chair', 32, 'USA');
Query OK, 1 row affected (0.12 sec)
mysql> insert into product(productID, docversion, name, price, location) VALUES('PID456', 0, 'Table', 39, 'UK');
Query OK, 1 row affected (0.16 sec)
mysql> insert into product(productID, docversion, name, price, location) VALUES('PID456', 1, 'Table', 43, 'Canada');
Query OK, 1 row affected (0.08 sec)
mysql> insert into product(productID, docversion, name, price, location) VALUES('PID123', 2, 'Chair', 29, 'UK');
Query OK, 1 row affected (0.09 sec)
mysql> select * from product;
+-----------+------------+-------+-------+----------+
| productId | docversion | name | price | location |
+-----------+------------+-------+-------+----------+
| PID123 | 0 | Chair | 25 | USA |
| PID123 | 1 | Chair | 32 | USA |
| PID456 | 0 | Table | 39 | UK |
| PID456 | 1 | Table | 43 | Canada |
| PID123 | 2 | Chair | 29 | UK |
+-----------+------------+-------+-------+----------+
5 rows in set (0.00 sec)
mysql> select * from product where location='USA' AND name='Chair' AND docversion = (select max(docversion) from product where location='USA' AND name='Chair' group by productId);
+-----------+------------+-------+-------+----------+
| productId | docversion | name | price | location |
+-----------+------------+-------+-------+----------+
| PID123 | 1 | Chair | 32 | USA |
+-----------+------------+-------+-------+----------+
1 row in set (0.01 sec)
现在将相同的查询转换为 sequelize
product.findAll({
where: {
location:{
[Op.eq]: 'USA',
},
name:{
[Op.eq]: 'Chair',
},
docversion:{
[Op.eq]: sequelize.literal(`select max(docversion) from product where location='USA' AND name='Chair' group by productId`),
},
}
})