MySQL交叉引用表连接

时间:2014-11-17 14:04:13

标签: mysql search join

我对sql很新,搜索论坛没有给我正确的答案,所以我换了一个新的。我有三张桌子:

产品

  • PRODUCT_ID
  • PRODUCT_DESCRIPTION

关键字

  • keyword_id
  • Keyword_description

参考表keywords_to_products:

  • REFERENCE_ID
  • keyword_id->涉及关键字表
  • product_id - >涉及产品表

我正在寻找两个问题:

  • 使所有产品与一个或多个特定关键字匹配的产品(我想我已经拥有了这个) 即:所有产品都有关键词' bolt'或者'螺丝'
  • 一个可以匹配多个关键字(AND)的产品,这是我不能得到的产品...... 即:所有产品都有关键词' bolt'和'坚果'

虽然我认为这不是最令人兴奋的事情,但我无法理解。

此外,我想知道我是否做对了。

我正在写一个有appr的应用程序。 1.000.000种不同的产品,带有商品编号和描述。我将描述中的重要单词添加到关键字数据库中,并添加其他关键字,如EAN编号或等效产品编号,这些关键字不在产品表中。 这些都是通过关键字到产品表连接的。

每个关键字,例如EAN数字,都可以引用多个产品。

这个想法只是搜索keyword_to_product_table而不是搜索products表中的多个字段。好主意??

提前感谢您的回复..

此致,Arno Verkley

3 个答案:

答案 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")

http://sqlfiddle.com/#!2/b6053/3

答案 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