sql - SQLite 查询 - 过滤器名称,其中每个关联的 id 都包含在一组 id 中
问题描述
我正在尝试制定一个查询,该查询将找到我在给定的一组 id 中的所有不同Names
的。LocationIDs
问题是,如果LocationIDs
与 distinct 关联的任何一个Name
不在集合中,那么Name
不应该在结果中。
假设我有下表:
ID | LocationID | ... | Name
-----------------------------
1 | 1 | ... | A
2 | 1 | ... | B
3 | 2 | ... | B
我需要一个类似于
SELECT DISTINCT Name FROM table WHERE LocationID IN (1, 2);
上面的问题是它只是检查是否LocationID
是 1 或 2,这将返回以下内容:
A
B
但我需要它返回的是
B
因为 B 是唯一Name
两个LocationIDs
都在集合中的 (1, 2)
解决方案
您可以尝试编写两个子查询。
- 得到
count
每个Name
- 看你
count
的情况。
然后join
按数量计算它们,这意味着您需要全部匹配您的条件计数。
架构(SQLite v3.17)
CREATE TABLE T(
ID int,
LocationID int,
Name varchar(5)
);
INSERT INTO T VALUES (1, 1,'A');
INSERT INTO T VALUES (2, 1,'B');
INSERT INTO T VALUES (3, 2,'B');
查询 #1
SELECT t2.Name
FROM
(
SELECT COUNT(DISTINCT LocationID) cnt
FROM T
WHERE LocationID IN (1, 2)
) t1
JOIN
(
SELECT COUNT(DISTINCT LocationID) cnt,Name
FROM T
WHERE LocationID IN (1, 2)
GROUP BY Name
) t2 on t1.cnt = t2.cnt;
| Name |
| ---- |
| B |
推荐阅读
- firebase - Firestore 中的安全规则以防止敏感字段
- mysql - mysql - 如何根据用户的格式格式化数字
- dll - 为什么“vkCreateInstance”会导致 vulkan 演示和示例代码崩溃?
- ruby-on-rails - 使用操作文本时将数据发送到错误的表?
- ios - 如何修复崩溃“致命异常:NSInvalidArgumentException”
- pyspark - pyspark 从星期四开始的一周获取月份的周数
- c - 如何修复“在c中递归打印子目录”
- c++ - 为什么这些示例之一是未定义的行为而另一个不是?
- c# - 从一对多的情况如何在实体框架中获取常见项目
- javascript - 错误:模块构建失败(来自 ./node_modules/babel-loader/lib/index.js):语法错误: