【问题标题】:sql query returns no result with many to many relationsql查询不返回具有多对多关系的结果
【发布时间】: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 对不起,我把这个例子放在一起很糟糕。编辑了我的问题,干杯。
  • 要求还是不清楚。 Ferrarirar 与您的查询有什么关系?发布样本数据和预期结果。
  • 正如您提到的,您只检查数据库中的一条记录,请确保 item 表的相同 item_id 应该存在于您要加入的其他表中。

标签: sql sqlite android-sqlite


【解决方案1】:

通过将语句分成三个单独的选择并应用 UNION 运算符来解决它 https://www.w3schools.com/sql/sql_union.asp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多