我有一个表格
如果用户选择产品1和2,则查询应该只返回位置2。如果用户选择产品2和3,则查询应该返回位置1。对于产品1、2和3,没有位置是有效的,对于产品2,两个位置都是有效的。
products
和一个表格 locations
,它们通过表格 products_locations
在多对多关系中连接在一起。现在客户可以选择一组产品,我希望运行一个查询,只选择所有选定产品都可用的地点。
一开始似乎很简单,但我发现自己被如何实现这一点所困扰。我最初认为可以使用类似以下内容获取所有正确的位置 ID:
SELECT 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,两个位置都是有效的。
postgresql
、oracle
、sql-server
、db2
等。 - user330315