gpt4 book ai didi

mysql - 查找具有相同关键字的所有产品

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:50 26 4
gpt4 key购买 nike

我有三个表:

products(product_id, product_description)
keywords(keyword_id, keyword_name)
product_keyword(FOREIGN KEY(product_id) REFERENCES products(product_id), FOREIGN KEY (keyword_id) REFERENCES keywords(keyword_id))

如果我想返回与给定产品具有相同关键字的所有产品,我该怎么做?

我尝试了一些类似的方法:

SELECT * from products
WHERE product_keyword having product_keyword.product_id = 1 /* don't know how to make this a general statement, but let's assume that I'm looking for all products with the same keywords as product number 1

想不通。

最佳答案

一种方法是将关键字连接在一起并使用该字符串进行连接:

select p.product_id, p.keyword_ids
from (select product_id, group_concat(keyword_id order by keyword_id) as keyword_ids
from product_keywords
group by product_id
) p join
(select group_concat(keyword_id order by keyword_id) as keyword_ids
from product_keywords
where product_id = 1
) p1
on p.keyword_ids = p1.keyword_ids;

还有一种方法比较麻烦,但是使用的是比较传统的SQL。对关键字进行自连接并进行大量计数:

select p.product_id
from key_words p left join
key_words p1
on p1.key_word = p.key_word nd
p1.product_id = 1
group by p.product_id
having count(*) = count(p1.keyword) and
count(*) = (select count(*) from key_words pp1 where pp1.product_id = 1);

left join保留每个产品的所有关键字。 having然后做两件事:

  • count(*) = count(p1.keyword)仅返回所有关键字匹配的行。
  • count(*) = <subquery>确保关键字的数量是第一个产品的数量。

这两个公式都假定在 product_keyword 中没有重复项s,这似乎是一个合理的假设。明智地使用 distinct如果这是一个问题,可以工作。

关于mysql - 查找具有相同关键字的所有产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59225655/

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