gpt4 book ai didi

MySQL 多重连接或嵌套 SELECT 查询?

转载 作者:行者123 更新时间:2023-11-29 03:04:58 25 4
gpt4 key购买 nike

我正在尝试使用 MySql 进行分面搜索。

我有两个表:

配件:

id    product_id    price

1 6000001 24.99
2 6000002 20.99
3 6000003 22.99
4 6000004 25.99
5 6000005 29.99

标签:

id    tagname    tagid    tagvalue    product_id

1 Brand 6000008 Apple 6000001
2 Colour 6000009 Green 6000001
3 Brand 6000008 Sony 6000003
4 Brand 6000008 Sharp 6000021
5 Brand 6000008 Panasonic 6000022
6 Brand 6000008 Onkyo 6000027

目前我正在运行以下查询来选择产品列表:

SELECT 
tags.tagname,
tags.tagid,
tags.tagvalue,
accessories.*
FROM accessories
Left Join tags ON tags.product_id = accessories.product_id
WHERE tags.tagid = '6000008'

连接给出了一个包含 6 条记录的记录集。

为了填充搜索的各个方面,我还想要一个 [tags.tagvalues] 列表,其中 [accessories.product_id] 和 [tags.product_id] 匹配,并保留上述查询。

所以我需要返回“Apple”和“Green”以及 6 条记录。

我可以为每个 product_id 触发一个查询,但这似乎是一种非常低效的方法。也许我的方法需要重新思考。

最佳答案

如果我没理解错的话,您希望产品的所有标签都具有与 tags.tagid = '6000008' 匹配的标签。从逻辑上讲,您可以这样理解:

SELECT tags.tagname, tags.tagid, tags.tagvalue, accessories.* 
FROM accessories left join
tags
ON tags.product_id = accessories.product_id
WHERE accessories.product_id in (select product_id
from tags
where tags.tagid = '6000008'
)

早期版本的 MySQL 在 in 和子查询方面存在性能问题。您可以将其重写为 join:

SELECT tags.tagname, tags.tagid, tags.tagvalue, accessories.* 
FROM accessories left join
tags
ON tags.product_id = accessories.product_id join
(select distinct product_id
from tags
where tags.tagid = '6000008'
) Filter
on accesories.Product_id = Filter.Product_id

关于MySQL 多重连接或嵌套 SELECT 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17166782/

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