我对sql很新,搜索论坛没有给我正确的答案,所以我换了一个新的。我有三张桌子:
产品
关键字
参考表keywords_to_products:
我正在寻找两个问题:
虽然我认为这不是最令人兴奋的事情,但我无法理解。
此外,我想知道我是否做对了。
我正在写一个有appr的应用程序。 1.000.000种不同的产品,带有商品编号和描述。我将描述中的重要单词添加到关键字数据库中,并添加其他关键字,如EAN编号或等效产品编号,这些关键字不在产品表中。 这些都是通过关键字到产品表连接的。
每个关键字,例如EAN数字,都可以引用多个产品。
这个想法只是搜索keyword_to_product_table而不是搜索products表中的多个字段。好主意??
提前感谢您的回复..
此致,Arno Verkley
答案 0 :(得分:0)
这是你想要的吗?
select distinct p.Id, p.Description
from Product p
join ProductKeyword pk
on p.id = pk.ProductId
join Keyword k
on k.id = pk.KeyWordId
and k.description in ("Red", "Yellow")
答案 1 :(得分:0)
直接在主表中搜索,比如在说明栏中,你会看到这样的地方
WHERE
description like "%bolt%"
and description like "%nut%"
现在使用关键字表格(product_id,关键字),我可以建议
SELECT
DISTINCT(p.*)
FROM Product p
JOIN ProductKeyword pk1
ON p.id = pk1.productId
JOIN ProductKeyword pk2
ON p.id = pk2.productId
WHERE
pk1.keyword = "bolt"
AND
pk2.keyword = "nut"
是的,关键字_to_product表听起来不错。您可以在关键字上使用索引,这将使您的查询保持快速(当'like'运算符会减慢大表上的大量查询时)。
答案 2 :(得分:0)
首先,非常感谢答案!
这两个答案中的一小部分似乎都可以解决问题(在小提琴上;顺便感谢这个非常有用的试错工具,虽然它不是很快; o()
SELECT distinct p.id, p.descriptionFROM Product p
JOIN ProductKeyword pk1
ON p.id = pk1.ProductId
join Keyword k1
on k1.id = pk1.KeyWordId
JOIN ProductKeyword pk2
ON p.id = pk2.ProductId
join Keyword k2
on k2.id = pk2.KeyWordId
WHERE
k1.description = "Yellow"
AND
k2.description = "Red"
使用id' s和keyword.description上的索引,这将是最快的方法吗?如果我将使用两个以上的关键字怎么办?只需添加更多联接以及在哪里?
问候,Arno