【发布时间】:2018-09-26 09:49:49
【问题描述】:
我有一个表 products 和一个表 locations,它们以多对多关系与表 products_locations 链接在一起。现在客户可以选择一组产品,我想运行一个查询,只选择所有选定产品都可用的位置。
起初这似乎很简单,但我发现自己对如何实现这一点感到很困惑。我最初认为我可以使用类似
的东西获得所有正确的位置IDSELECT location_id
FROM products_locations
WHERE product_id = ALL [the user selected product ids]
但仔细想想,这似乎也没有意义(products_locations 的结构很简单[product_id, location_id]。
任何有关如何构建此类查询的建议都将不胜感激。我觉得我忽略了一些基本的东西..
编辑:我正在使用mysql 语法/方言
快速示例:给定下表
| products | | locations | | products_locations |
| id | name | | id | name | | product_id | location_id |
|------------| |-----------| |--------------------------|
| 1 | prod1 | | 1 | locA | | 1 | 2 |
| 2 | prod2 | | 2 | locB | | 2 | 1 |
| 3 | prod3 | |-----------| | 2 | 2 |
|------------| | 3 | 1 |
|--------------------------|
如果用户选择产品 1 和 2,则查询应仅返回位置 2。如果用户选择产品 2 和 3,则查询应返回位置 1。对于 1、2 和 3,没有任何位置有效,对于产品 2,这两个位置都有效。
【问题讨论】:
-
添加一些示例表数据和预期结果。开始之前先看看stackoverflow.com/help/mcve。
-
我使用 mysql 作为方言,我将它添加到原始问题中。我的错,我忘了指定
-
@jarlh 你是对的,我错误地省略了一个例子,因为害怕混淆读者,我现在添加了一个,因为我能够把它归结起来。谢谢!
标签: mysql sql relational-division