我在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的查询。 但我总是失败的事实是字符串必须从另一个表的行合并。
答案 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打败了我。