【问题标题】:Ranking results based on case insensitive matches from nested tables in oracle根据oracle中嵌套表中不区分大小写的匹配对结果进行排名
【发布时间】:2019-12-05 04:43:32
【问题描述】:

我是对象关系数据库的新手,我正在尝试开发一个查询,该查询将根据与主题的匹配数返回结果。例如,我的表如下所示:table 我的主题类型由两个属性(id、title)组成。每本书可以有多个主题,因此当用户输入一个主题字符串时,它将返回 isbn、title、count(*)、按匹配数排名的价格(count)。我已经使用连接形成了关系数据库的查询,但我无法为嵌套表重现它。我的关系数据库查询是这样的:SELECT b.ISBN, b.TITLE, COUNT(*) FROM BOOKS b JOIN BOOK_SUBJECT bs ON bs.ISBN = b.ISBN WHERE bs.ID IN (1, 2, 3) GROUP BY b.ISBN, b.TITLE ORDER BY COUNT(*) DESC

编辑:这次我尝试按主题标题而不是 id 进行搜索。

编辑:解决方案SELECT b.ISBN, b.TITLE, count(*) FROM BOOKS2 b, table(b.subjects) d WHERE d.title like '%math%' or like '%science%' GROUP BY b.ISBN, b.TITLE ORDER BY COUNT(*) DESC

编辑:如何使它不区分大小写?

【问题讨论】:

  • 您使用的是哪个数据库?如果不是 Oracle,则从该问题中删除 Oracle 标记。
  • 我实际上已经解决了这个问题。我将使用查询编辑帖子。
  • 我现在的问题是如何使搜索不区分大小写?例如“数学”与“数学”或“数学”相同。我正在使用甲骨文。
  • 不断变化的问题让人很难理解。欢迎来到 SO。
  • 现在,问题标题和问题/答案不匹配。也请编辑问题标题。对以后的读者很有帮助。

标签: database oracle nested-table


【解决方案1】:

根据您的评论:

我现在的问题是如何使搜索不区分大小写?例如“数学”与“数学”或“数学”相同

您可以使用upperlower 函数将您的title 转换为相应的表格并进行相应的搜索。试试下面。

SELECT b.isbn, 
       b.title, 
       Count(*) 
FROM   books2 b, 
       TABLE(b.subjects) d 
WHERE  LOWER(d.title) LIKE '%math%' 
        OR LOWER(d.title) LIKE '%science%' 
GROUP  BY b.isbn, 
          b.title 
ORDER  BY Count(*) DESC 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多