MySQL交叉引用表联接
我对sql非常陌生,搜索论坛没有给我正确的答案,所以我换了一个新的。我有三张桌子: 产品 产品标识 产品描述 关键词 关键字\u id 关键词描述 以及一个参考表,其中包含了以下关键字\u至\u产品: 参考号 关键字\u id->与关键字表相关 产品标识->与产品表相关 我想问两个问题: 一个给所有产品匹配一个或多个特定的关键字我想我已经有了这个 ie:所有具有“螺栓”或“螺钉”关键字的产品 一个给所有产品匹配多个关键字,这是一个我没有得到。。。 ie:所有具有“螺栓”和“螺母”关键字的产品 虽然我认为这不是最令人兴奋的事情,但我就是想不出来 此外,我想知道我是否做了正确的事情 我正在写一份申请书,上面有appr。其中有1.000.000种不同的产品,带有商品编号和说明。我将描述中的重要单词添加到关键字数据库中,还添加了其他关键字,如EAN number或等效productnumber,这些关键字不在产品表中。 这些都是通过关键字连接到product表的 每个关键字,例如EAN编号,都可以引用多个产品 其思想是只搜索关键字_to_product_表,而不是搜索产品表中的多个字段。好主意 提前感谢您的回复 你好,阿诺·维克利这是你想要的吗MySQL交叉引用表联接,mysql,search,join,Mysql,Search,Join,我对sql非常陌生,搜索论坛没有给我正确的答案,所以我换了一个新的。我有三张桌子: 产品 产品标识 产品描述 关键词 关键字\u id 关键词描述 以及一个参考表,其中包含了以下关键字\u至\u产品: 参考号 关键字\u id->与关键字表相关 产品标识->与产品表相关 我想问两个问题: 一个给所有产品匹配一个或多个特定的关键字我想我已经有了这个 ie:所有具有“螺栓”或“螺钉”关键字的产品 一个给所有产品匹配多个关键字,这是一个我没有得到。。。 ie:所有具有“螺栓”和“螺母”关键字的产品 虽
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")
直接在主表中搜索,比如在description列中,您将看到一个类似这样的where
WHERE
description like "%bolt%"
and description like "%nut%"
现在使用关键字表product_id,keyword,我可以建议
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"
是的,关键字到产品表听起来是个好主意。您可以在关键字上使用索引,当“like”操作符会减慢一个大表上的许多查询时,它将使您的查询保持快速。首先,非常感谢您的回答 两种答案中的一点似乎都起到了关键作用;顺便说一句,感谢这个非常有用的试错工具,虽然它不是很快;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和关键字上有索引。说明这是最快的方法吗??如果我会使用两个以上的关键词呢??只需添加更多连接,它在哪里
你好,阿诺你好,谢谢你的回复。这适用于第一个“或”选项,但不适用于“和”选项。在这种情况下,结果应该只包含foo,foo的关键字既有“red”也有“yellow”。是的,更多的连接,方法在哪里。同样,有了正确的索引,速度也很快。