0

我有一个项目数据库,我希望能够使用预定义的关键字进行搜索。

我现在拥有的是三个这样的表:

Items_tbl:

item_idx、item (UNIQUE)、description 等。

关键字tbl:

kw_idx, kw (唯一), kw_description

交叉表:

item_idx,kw_idx。

我想做“和”搜索...就像...给我(不同)每个具有关键字“海蓝宝石”、“蓝色”和“绿色”的项目。即“海蓝宝石”和“蓝色”和“绿色”......

搜索“或”搜索非常简单,但我很难像这样进行“和”搜索......在这个前。我想查找同时具有“蓝色”和“绿色”的项目,而不是仅具有“绿色”的项目。

4

2 回答 2

0
SELECT   Items_tbl.*
FROM     Items_tbl
    JOIN Cross_tbl   USING (item_idx)
    JOIN Keyword_tbl USING (kw_idx)
WHERE    kw_description IN ('aquamarine','blue','green')
GROUP BY item_idx
HAVING   COUNT(*) = 3

这假设关键字最多只能与项目关联一次(即对in的UNIQUE约束);如果不是这种情况,您将不得不替换为效率较低的 ,或者如果相同的关键字可以多次出现(即对列没有约束),则效率更低。(item_idx, kw_idx)Cross_tblCOUNT(*)COUNT(DISTINCT kw_idx)COUNT(DISTINCT kw_description)Keyword_tblUNIQUEkw_description

于 2013-05-21T12:07:59.950 回答
0

查询每个关键字的源表。

select * from YourTable where YourColumn like '%keyword%' and YourColumn like '%foo%';

于 2013-05-21T12:10:19.460 回答