我有三个SQLite表,一个产品表,一个keywords_products表和一个关键字表。
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。每个产品都可以在关键字表中分配多个关键字。
关键字表如下所示:
keyword_rec_id keyword
-------------- -----------
60 melee
43 scifi
87 waterkeywords_products表如下所示(可以为许多产品分配一个关键字):
keyword_rec_id product_rec_id
-------------- --------------
43 1
60 1
43 2
87 3products表如下所示:
product_rec_id name
-------------- --------------
1 Scifi Melee Weapons
2 Scifi Ray Weapon
3 Lake House很长一段时间以来,我一直使用这个SQL命令,但我只是注意到对于an和操作,它显然不能工作,因为所有的关键字都在单独的行中。
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%')有时,我希望能够检索与输入的所有关键字(和)匹配的产品,或者仅仅检索一个关键字( or ) ( OR操作是我现在唯一能做的)。
发布于 2018-03-25 18:29:57
你可以用HAVING
SELECT products.product_rec_id, COUNT(DISTINCT keywords.keyword) AS cnt
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%')
GROUP BY products.product_rec_id
HAVING SUM(CASE WHEN keywords.keyword LIKE '%scifi%' THEN 1 ELSE 0 END)>0
AND SUM(CASE WHEN keywords.keyword LIKE '%melee%' THEN 1 ELSE 0 END) > 0;编辑:
若要同时获得两者(如果位于同一行):
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%melee%'
OR keywords.keyword LIKE '%melee%scifi%';https://stackoverflow.com/questions/49478887
复制相似问题