H2 数据库和全文搜索的内连接

Posted

技术标签:

【中文标题】H2 数据库和全文搜索的内连接【英文标题】:Inner join with H2 database and fulltextsearch 【发布时间】:2013-02-08 15:53:47 【问题描述】:

我有一个表“BANKRECORDING”,它包含对不同表的 ID 引用。

这个表存储在H2数据库中,我使用的是全文搜索的方法。

例如,我有一个“BANKRECORDING”:

ID | ID_LIBELLE | ID_PAYMENT
1  | 2          | 3
2  | 2          | 10

通过简单的查询,我的内部连接可以工作。但是在这个查询中我不知道该怎么做:

SELECT B.* 
FROM FT_SEARCH_DATA(1, 0, 0) FT, 
BANKRECORDING B 
WHERE FT.TABLE='BANKRECORDING' AND B.ID=FT.KEYS[0] 

它返回我所有的结果,但带有 ID...

我已经尝试过了,但它返回了很多结果......存储在我的数据库中的逐行元素。

SELECT B.*, L.*, ET.*, P.*, MO.* 
FROM FT_SEARCH_DATA('car', 0, 0) FT, 
BANKRECORDING B, LIBELLE L, ETAT ET, PAYMENT P, MOTIF MO
WHERE FT.TABLE='BANKRECORDING' AND B.ID=FT.KEYS[0]

有人知道如何在这个查询中进行 INNER JOIN 吗?

编辑:

期望的输出:

ID | ID_LIBELLE | ID_PAYMENT
1  | car         | bank check
2  | car         | transfer

【问题讨论】:

你能显示想要的输出吗? 将代码示例翻译成英文可能是个好主意。使用我们不理解的名称来推理数据模型有点困难。 哎呀......对不起,我的示例输出数据发生了变化 我明白了。不知道这样的工具,将阅读它。您可能希望将此链接添加到问题中。 不好意思,说一下“这个表是存储在H2Databse中的,我用的是全文搜索的方式”。不是很清楚,我知道 【参考方案1】:

哦!感谢安德鲁,我发现了它的工作原理!事实上,要显示数据,我们必须在 SELECT 中指定每个元素:

SELECT b.id, l.libelle, p.libelle
  FROM FT_SEARCH_DATA(1, 0, 0) FT, ENREGISTREMENT b
   JOIN LIBELLE l on (b.id_libelle = l.id)
   JOIN MODEREGLEMENT p on (b.id_MODEREGLEMENT = p.id)
 WHERE b.id=FT.KEYS[0]
 AND FT.TABLE='ENREGISTREMENT' 
ORDER BY b.id;

我不知道为什么我们不能为元素调用“b.*”...

【讨论】:

以上是关于H2 数据库和全文搜索的内连接的主要内容,如果未能解决你的问题,请参考以下文章

使用 JPA (Eclipselink) 在 H2 数据库中执行全文搜索

全文搜索是怎么实现的?

2021年大数据ELK:Lucene全文检索库介绍

2021年大数据ELK:Lucene全文检索库介绍

全文搜索之MySQL与ElasticSearch搜索引擎

在搜索普通查询而不是全文搜索的情况下,Solr是否比普通的RDBMS更好?