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

标签 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”]中获得相同的结果,但这可能要求太多。

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

最佳答案

您可以使用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;

关于sql - 在多个联接记录中进行SQL字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431735/

相关文章:

MySQL - 如果它以数字或特殊字符开头

php - SQL语句给我一个错误,虽然看起来很好

sql - ruby rails : Duplicates with Join

sql - 使用sql server添加每月的所有金额

java - 如何将 SQlite 数据库加载到 Recyclerview 中?

Python Sqlite 更新多个值

mysql - 选择不同的列以及 MySQL 中的其他一些列

带元组的 MySQL CASE 语句

c - sqlite3 C API无法打开/关闭超过1024个数据库

jquery - 使用 JQuery 隐藏选择的选项