Select 来自数据库,基于联结 table 中的多次出现
Select from database based on multiple occurrences in junction table
你能帮我找到从数据库中选择一些数据的正确方法——基于在联结点多次出现吗?
我正在使用 Sequelize ORM,但普通 SQL 也可以。查询应该是动态的——基于用户输入。虽然,即使是静态解决方案在这一点上也会非常有帮助。
我将使用一些示例来更好地描述我在这里面临的问题:
我有两个 table——假设一个用于订单,第二个用于产品(订单、产品)。
每个订单可以包含多个产品,每个产品可以关联多个订单。我在那些 table 之间使用 order_product (OrderProduct) 作为连接点 table 在 sequelize Many to Many relationshop 中制作(其中包含一些附加字段,而不是订单和产品的 ID——例如产品数量):
Order.belongsToMany(Product, { through: OrderProduct });
Product.belongsToMany(Order, { through: OrderProduct });
我的问题是 – 我如何从数据库中获取所有订单,其中包含 – 例如 – ID = 1 的产品,ID = 2 的产品,ID = 3 的产品?
使用 Sequelize 或普通 SQL 最优雅的解决方案是什么?
我在 Sequelize 中尝试使用 include 语句,但在这种情况下我未能正确使用它。
另一方面,许多 'EXISTS' 简单的 SQL 声明(一个接一个)可能太昂贵了?
谢谢!
在 SQL 中,您将有一个桥接 table,名称类似于 OrderProducts
。然后你可以使用聚合和 having
:
select op.orderId
from orderProducts op
where op.productId in (1, 2, 3)
group by op.orderId
having count(*) = 3; -- number of product
如果一个产品可以多次下单,则使用:
having count(distinct op.productId) = 3
你能帮我找到从数据库中选择一些数据的正确方法——基于在联结点多次出现吗?
我正在使用 Sequelize ORM,但普通 SQL 也可以。查询应该是动态的——基于用户输入。虽然,即使是静态解决方案在这一点上也会非常有帮助。
我将使用一些示例来更好地描述我在这里面临的问题:
我有两个 table——假设一个用于订单,第二个用于产品(订单、产品)。 每个订单可以包含多个产品,每个产品可以关联多个订单。我在那些 table 之间使用 order_product (OrderProduct) 作为连接点 table 在 sequelize Many to Many relationshop 中制作(其中包含一些附加字段,而不是订单和产品的 ID——例如产品数量):
Order.belongsToMany(Product, { through: OrderProduct });
Product.belongsToMany(Order, { through: OrderProduct });
我的问题是 – 我如何从数据库中获取所有订单,其中包含 – 例如 – ID = 1 的产品,ID = 2 的产品,ID = 3 的产品?
使用 Sequelize 或普通 SQL 最优雅的解决方案是什么?
我在 Sequelize 中尝试使用 include 语句,但在这种情况下我未能正确使用它。
另一方面,许多 'EXISTS' 简单的 SQL 声明(一个接一个)可能太昂贵了?
谢谢!
在 SQL 中,您将有一个桥接 table,名称类似于 OrderProducts
。然后你可以使用聚合和 having
:
select op.orderId
from orderProducts op
where op.productId in (1, 2, 3)
group by op.orderId
having count(*) = 3; -- number of product
如果一个产品可以多次下单,则使用:
having count(distinct op.productId) = 3