【发布时间】:2018-03-25 17:41:55
【问题描述】:
我有三个 SQLite 表,一个 products 表,一个 keywords_products 表和一个 keywords 表。
CREATE TABLE products (
product_rec_id INTEGER PRIMARY KEY NOT NULL,
name VARCHAR (100) NOT NULL
);
CREATE TABLE keywords_products (
keyword_rec_id INTEGER NOT NULL,
product_rec_id INTEGER NOT NULL
);
CREATE TABLE keywords (
keyword_rec_id INTEGER PRIMARY KEY NOT NULL,
keyword VARCHAR (50) NOT NULL UNIQUE
);
keywords_products 表保存产品的记录 ID 和关键字的记录 ID。每个产品都可以在 keywords 表中分配多个关键字。
keyword 表如下所示:
keyword_rec_id keyword
-------------- -----------
60 melee
43 scifi
87 water
keywords_products 表如下所示(一个关键字可以分配给多个产品):
keyword_rec_id product_rec_id
-------------- --------------
43 1
60 1
43 2
87 3
products 表如下所示:
product_rec_id name
-------------- --------------
1 Scifi Melee Weapons
2 Scifi Ray Weapon
3 Lake House
很长一段时间我一直在使用这个 SQL 命令,但是我只是注意到对于 AND 操作它显然不起作用,因为所有关键字都在单独的行中。
SELECT
products.product_rec_id,
keywords.keyword
FROM
products
LEFT OUTER JOIN keywords_products ON
products.product_rec_id = keywords_products.product_rec_id
LEFT OUTER JOIN keywords ON
keywords_products.keyword_rec_id = keywords.keyword_rec_id
WHERE
(keywords.keyword LIKE '%scifi%' OR
keywords.keyword LIKE '%melee%')
有时我希望能够检索与输入的所有关键字 (AND) 或仅匹配一个关键字 (OR) 的产品(OR 操作是我现在唯一能做的)。
【问题讨论】:
标签: sqlite outer-join