gpt4 book ai didi

mysql - 如何根据3种关系选择表中的项目?

转载 作者:行者123 更新时间:2023-11-29 13:38:48 25 4
gpt4 key购买 nike

我有 3 张 table :

 Categories
| id | name
| 1 | Samsung
| 2 | Apple


Products
| id | category_id | name
| 1 | 1 | Galaxy S4
| 2 | 1 | Galaxy S3
| 3 | 1 | SHG-G600
| 4 | 3 | Lumia 920


Tags
| id | product_id | name | type
| 1 | 1 | smart-phone | phoneType
| 2 | 2 | smart-phone | phoneType
| 3 | 3 | normal-cell | phoneType
| 4 | 1 | red | phoneColor

我正在尝试找到一种方法来选择所有将“智能手机”设置为“phoneType”、将“红色”设置为“phoneColor”的三星设备。

这就是我到目前为止所做的:

 SELECT *
FROM `products`
INNER JOIN `product_tag` ON `product_tag`.`product_id` = `products`.`id`
INNER JOIN `tags` ON `tags`.`id` = `products`.`id`
WHERE (
`tags`.`type` = 'phoneType'
AND `tags`.`name` = 'smart-phone'
)
OR (
`tags`.`type` = 'phoneColor'
AND `tags`.`name` = 'red'
)
)

这不能按原样工作(没有选择类别)。

我也不知道如何加入类别并添加 wherecategories.id = 1

最佳答案

您可以通过将逻辑放入 having 子句中来实现此目的。对于您的示例代码:

SELECT p.*
FROM `products` p join
`product_tag` pt
ON pt.`product_id` = p.`id` join
`tags` t
ON t.`id` = p.`id`
group by p.id
having sum(t.`type` = 'caseMaterial' AND t.name = 'leather') > 0 and
sum(t.`type` = 'caseFor' AND t.`name` = 'iphone-5') > 0;

但是,我不太确定这与问题开头的表格有何关系。您的代码示例和数据布局不一致。

关于mysql - 如何根据3种关系选择表中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18401430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com