mysql - 使用 MATCH AGAINST 将查询从 MySQL 转换为 Oracle

标签 mysql sql database oracle oracle-text

我真的需要有关以下用 MySQL 编写的查询的帮助,我想在 Oracle pl/sql 中进行转换。我读了一些Oracle文本文档,我想对于MySQL中的MATCH AGAINST,我可以在Oracle中使用CONTAINS,但是我在转换列score、score0和score1时遇到问题。

SELECT table_id,
       MATCH(text) AGAINST('grand hotel') AS score,
       MATCH(text) AGAINST('grand') AS score0,
       MATCH(text) AGAINST('hotel') AS score1 
  FROM tbl
 WHERE MATCH(text) AGAINST('grand hotel')
 ORDER BY score ASC

最佳答案

我想您在问题中引用的文档是 Oracle Text并且您已经对该功能有些熟悉了。您也没有给出为什么应该涉及 PL/SQL 的原因,因此下面是一个简单的纯 SQL 示例,应该可以解决您的问题:

数据

create table so32 as
select 1 as id, 'Lorem grand ipsum dolor sit amet, consectetur adipiscing elit. Cras faucibus.' as text from dual union all
select 2 as id, 'Lorem ipsum hotel dolor sit amet, consectetur adipiscing elit. Cras faucibus.' as text from dual union all
select 3 as id, 'Lorem ipsum dolor sit amet, grand consectetur adipiscing elit. Cras faucibus.' as text from dual union all
select 4 as id, 'Lorem ipsum dolor sit amet, consectetur hotel adipiscing elit. Cras faucibus.' as text from dual union all
select 5 as id, 'Lorem ipsum dolor sit amet, consectetur adipiscing elit grand. Cras faucibus.' as text from dual union all
select 6 as id, 'Lorem ipsum dolor sit amet grand hotel, consectetur adipiscing elit. Cras faucibus.' as text from dual
;

Oracle 文本索引

create index so32_index on so32(text) indextype is ctxsys.context;

查询

select id, 
       score(1) as grand,
       score(2) as hotel,
       score(3) as grandhotel
  from so32
 where contains(text, 'grand', 1) > 0
    or contains(text, 'hotel', 2) > 0
    or contains(text, 'grand hotel', 3) > 0
 order by score(3), score(2), score(1)
;

结果

        ID      GRAND      HOTEL GRANDHOTEL
---------- ---------- ---------- ----------
         1          4          0          0
         3          4          0          0
         5          4          0          0
         4          0          4          0
         2          0          4          0
         6          4          4          4

6 rows selected.

希望这有帮助!

关于mysql - 使用 MATCH AGAINST 将查询从 MySQL 转换为 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18581527/

相关文章:

mysql - 最好的 git mysql 版本控制系统?

php - 使用 fgetcsv() 发出解析数据 - 期望参数为资源

sql - oracle db中具有多个字段的条件唯一约束

mysql - 在 Spring Boot 中使用多个数据库

sql-server - "Is Identity"列属性在 SQL Server 中意味着什么?

mysql - 从 MySQL 的列中查找数组中的元素

c++ - 加密编译可执行文件中的常量字符串(例如密码)

mysql - 如何获取这两个表之间的相关数据

asp.net - 删除 SQL 更新中 WHERE 之前的最后一个逗号

c# - 如何在C#中填写DTO