这是在SQLite中。
我有两个表,X和Y。X有一个'id'字段。 Y有一个“标签”字段和一个映射到X.id的外键“ xid”。
假设我们要处理字符串列表,例如[“算盘”,“男中音”,“ custard”]。我想选择X中的每个记录N,其中Y包含所有这些记录:{“算盘”,N.id},{“男中音”,N.id},{“ custard”,N.id}。
如果可能的话,处理子字符串也将很不错,这样我们就可以从列表[“ aba”,“ tone”,“ star”]中获得相同的结果,但这可能要求太多。
我可能没有很好地解释过,所以我愿意在需要的地方澄清这个问题。
最佳答案
您可以使用group by
和having
。对于第一个问题:
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;
关于sql - 在多个联接记录中进行SQL字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431735/