在多个联接记录中进行SQL字符串搜索

时间:2018-07-19 21:09:08

标签: sql sqlite select

这是在SQLite中。

我有两个表X和Y。X有一个'id'字段。 Y有一个“标签”字段和一个映射到X.id的外键“ xid”。

假设我们要处理字符串列表,例如[“算盘”,“男中音”,“ custard”]。我想选择X中的每个记录 N ,其中Y包含所有这些记录:{“算盘”, N .id},{“男中音”, N .id},{“ custard”, N .id}。

如果可能的话,也可以处理子字符串,以便我们从列表[“ aba”,“ tone”,“ star”]中获得相同的结果,但这可能要求太多。

我可能没有很好地解释过,所以我愿意在需要的地方澄清这个问题。

1 个答案:

答案 0 :(得分:2)

您可以使用group byhaving。对于第一个问题:

select y.id
from y
where y.tag in ('abacus', 'baritone', 'custard')
group by y.id
having count(*) = 3;

第二个要复杂一点,因为您可以使用“马拉巴尔”或“半色调”或“ astaroth”之类的标签。所以:

select y.id
from y
group by y.id
having sum(case when y.tag like '%aba%' then 1 else 0 end) > 0 and
       sum(case when y.tag like '%tone%' then 1 else 0 end) > 0 and
       sum(case when y.tag like '%star%' then 1 else 0 end) > 0;