sql - 在一条记录中结合 2 个不同的属性来查找一个集合
问题描述
我有一个包含以下列的表,RecID、RegionID、LanguageID
我想根据 RegionID 和 languageID 查找集合。我想把它们联系起来的方式有点复杂。也许描述它的最好方法是通过例子。每个集合应包括通过 RegionID 或 LanguageID 相关的任何记录。我想创建一个新列 SetID 来区分每个 RecID 所在的集合。
我希望结果集看起来像:
RecID, SetID
例如,如果我有一个包含 5 条记录的表:
RecID, RegionID, LanguageID
1, A, Eng
2, B, Eng
3, B, Spa
4, C, Spa
5, D, Fre
那将代表2套。所需的输出将是:
RecID, SetID
1, 1
2, 1
3, 1
4, 1
5, 2
推理如下。RecID 1 通过匹配的 LangID 与 RecID2 相关。RecID 2 通过匹配的 regionID 与 RecID3 相关。RecID 3 通过匹配的语言ID 与recID 4 相关。由于这些都是相关的,因此它们在同一个集合中。RecID5 不涉及任何其他记录,因此它在自己的集合中。
解决方案
我想你想要这样的东西:
SELECT t.RecId, (CASE WHEN EXISTS (SELECT 1
FROM table t1
WHERE t1.LanguageID = t.LanguageID AND t.RegionID <> t1.RegionID
)
THEN 1 ELSE 2
END) AS SetID
FROM table t;
1
对于同一组和2
不同组的此版本。
推荐阅读
- java - 在 Google 工作表(JAVA)中附加日志时出现 403 错误
- python - 通过在 python 的行首放置 > 来引用?
- node.js - SQLite 数据库为同一列返回两个不同的值
- python-3.x - 为什么我不能通过循环从这个字典中提取数据?
- c# - Windows 窗体中的自由格式行问题
- java - 转换地图
使用 Jackson / Gson API 到 POJO - python - 使用来自 Scikit Optimize 的 @use_named_args
- python - 对消息不起作用的反应 (discord.py)
- android - Android Studio(导航抽屉问题)
- c++ - 替换 C++ 中两个迭代器之间的范围