【发布时间】:2020-02-06 16:04:19
【问题描述】:
我想先解释一下我的数据库是什么样的。我有与其他两个表标签和关键字相关的多对多项目表。
table: item
columns: id, name, subcategory, category
table: item_tag_join
columns: itemId, tagId
table: tag
columns: id, name
table: item_keyword_join
columns: itemId, keywordId
table: keyword
columns: id, name
现在,我想做的是搜索keyword.name、tag.name、item.name、item.category和item.subcategory,并在任何列包含时从item表中返回项目预期的字符串。
只要连接表中有一些记录,我就可以通过我的查询获得预期的结果。但是,当我的数据库中只有一个条目时,在项目表中,查询返回空。
即我已将“法拉利”添加到该项目,我想搜索“rar”它返回没有结果。 我正在使用 sqllite3,这是我需要您帮助的查询:
SELECT DISTINCT item.*
from item, tag, keyword
LEFT JOIN item_tag_join ON
item.id = item_tag_join.item_id
LEFT JOIN item_keyword_join ON item.id = item_keyword_join.item_id
WHERE UPPER(item.name) LIKE UPPER('%' || "cab" || '%')
or UPPER(item.category) LIKE UPPER('%' || "cab" || '%')
or UPPER(item.sub_category) LIKE UPPER('%' || "cab" || '%')
or (tag.id = item_tag_join.tag_id and UPPER(tag.name) LIKE UPPER('%' || "cab" || '%'))
or (keyword.id = item_keyword_join.keyword_id and UPPER(keyword.name) LIKE UPPER('%' || "cab" || '%'));
干杯。
【问题讨论】:
-
您的查询示例正在查找项目
LIKE"cab" 如果这是一个错字,请更正您的示例,否则您将不会得到“ferrari”的结果,因为“cab”在该单词中找不到。 -
至少这种情况:
tag.id = item_tag_join.item_id似乎很可疑。应该是:tag.id = item_tag_join.tag_id,对吧? -
@forpas 对不起,我把这个例子放在一起很糟糕。编辑了我的问题,干杯。
-
要求还是不清楚。
Ferrari和rar与您的查询有什么关系?发布样本数据和预期结果。 -
正如您提到的,您只检查数据库中的一条记录,请确保 item 表的相同 item_id 应该存在于您要加入的其他表中。
标签: sql sqlite android-sqlite