Sqlite Query用于搜索在字符串上连接的多个列的组合

时间:2012-03-20 13:35:34

标签: sqlite

我在Sqlite数据库中遇到了一个查询。 完整的表结构有点复杂,所以我将做一个分解为我的问题的例子。 我有2个表,如

T1
_id       name      v1        v2        v3
1         test      4         3         1
2         to        1         2         2
3         show      2         2         2
4         what      4         2         4
5         I         1         1         1
6         mean      3         3         1

T2
_id       name
1         this
2         is
3         a
4         test

v1,v2,v3是T2 _id的外键,并且组合将产生一个字符串。

在这个例子中:

T1 _id 1:testathis
T1 _id 2:thisisis
T1 _id 3:isisis
T1 _id 4:testistest
T1 _id 5:thisthisthis T1 _id 6:最新

在这个结果字符串中,我想搜索并获取结果表。 例如,如果搜索字符串是“isi”(在sql查询“%isi%”中),我想得到如下结果表:

name   v1v2v3
to     thisisis
show   isisis

它很容易退出,但我完全被困在这里。 我已经尝试了几种方法,包括 group_concat()以及 select ... where 子句的各种组合。 虽然我尝试了一个类似于this的查询。 但我总是失败的事实是字符串必须从另一个表的行合并。

2 个答案:

答案 0 :(得分:2)

Karl,试试这个:

select t1.name, t21.name || t22.name || t23.name as v1v2v3 from t1
join t2 t21 on t1.v1 = t21._id
join t2 t22 on t1.v2 = t22._id
join t2 t23 on t1.v3 = t23._id
where t21.name || t22.name || t23.name like '%isi%'

我现在没有SQLite来测试它,但它应该可以工作:)

答案 1 :(得分:1)

SELECT
  T1.name as name,
  tmpV1.name || tmpV2.name || tmpV3.name as v1v2v3
FROM
  T1
JOIN
  T2 as tmpV1 on T1.v1 = tmpV1._id 
JOIN
  T2 as tmpV2 on T1.v2 = tmpV2._id 
JOIN
  T2 as tmpV3 on T1.v3 = tmpV3._id
WHERE
  v1v2v3 like '%isi%'
;
编辑:aww Mosty打败了我。