【发布时间】:2025-12-24 17:20:23
【问题描述】:
我在下面有 4 张桌子:
订单
| id | items_quantity |
|---|---|
| 1 | 3 |
| 2 | 4 |
| 3 | 4 |
项目
| id | order_id | product_id |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 3 |
| 3 | 1 | 2 |
| 4 | 2 | 1 |
| 5 | 2 | 4 |
| 6 | 3 | 4 |
餐桌用品
| id | product_type_id | name |
|---|---|---|
| 1 | 1 | Red Bull |
| 2 | 2 | Dairy Pure |
| 3 | 3 | Aquafina |
| 4 | 4 | M&M's |
表 product_types
| id | name |
|---|---|
| 1 | Beverage |
| 2 | Milk |
| 3 | Water |
| 4 | Food |
我无法找到解决方案来获取包含饮料商品的所有订单。这些订单可以包含牛奶和水,但不包含食品。预期结果将是 id 为 1 的订单。 我已尝试过此查询,但我仍然收到包含食品的订单。
SELECT "orders".* FROM "orders"
INNER JOIN "items" ON "items"."order_id" = "orders"."id"
INNER JOIN "products" ON "products"."id" = "items"."product_id"
INNER JOIN "product_types" ON "product_types"."id" = "products"."product_type_id"
WHERE (product_types.name != 'Food')
GROUP BY product_types.name, orders.id HAVING (product_types.name = 'Beverage')
【问题讨论】:
-
更新您的问题,添加适当的数据样本和预期结果作为表格文本
-
HAVING SUM(product_types.name = 'Beverage') -
在 MySQL 中,你应该使用反引号而不是引号,或者在不使用保留字的地方什么也不用