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/

相关文章:

PHP PDO 如何显示 top SQL 计数

sql - 来自单个表的多个 Count()

php - 如何按特定模式对 MySQL 列进行排序?

c - 使用四个不同端口的套​​接字处理连接

sql - 在 Vertica 中创建变量

swift - UIView绘制中的SQLite3查询(_ :) not working with CATiledLayer

c++ - SQLite sqlite3pp C++ api:如何将可以在数据库中找到的所有 sqlite3pp::transactions 加载到某个 vector 或集合中?

Android更改数据库路径问题

java - 在struts <s :select>中访问javascript数组列表

mysql - 列名不明确错误