sql - 选择只有一个关联值不在预定义列表中的所有元素
问题描述
注意:我很难为这个问题选择一个标题。我不确定它是否准确地描述了我想要的东西,所以如果你能帮助改进标题而不是投反对票,我将不胜感激。:)
我有一个具有以下结构的表:
log:
+-----+-----+
| uid | uip | <- user id and user ip
+-----+-----+
我还有一个带有一些预定义用户 ID 的表:
predfined_users:
+-----+
| uid |
+-----+
| 1 |
-------
| 2 |
-------
| 3 |
-------
我想要达到的目标:
我的“算法”应该找到所有uip
以下步骤的结果对他们来说是 1:
- 从
log
与uip
- 计算有多少用户不在
predfined_users
表中。
例子:
假设这是与 IP 地址关联的用户列表1.0.0.0
:
+-----+
| uid |
+-----+
| 1 |
-------
| 3 |
-------
| 7 |
这些值中只有一个不在predfined_users
(7) 中,因此1.0.0.0
应返回。我也想选择所有uip
满足这一点的,也就是说,只有一个uid
与它们相关联的不在predfined_users
. 此外,值得注意的是,如果 auip
仅与 one 相关联uid
,则查询不应返回它。
我已经尝试过的
这是我的一般想法,但我不确定要写什么而不是???
或者即使我的方向是正确的:
SELECT [uip]
FROM log
WHERE (
SELECT COUNT(*)
FROM (
SELECT DISTINCT [uid]
FROM log WHERE [uip] = ???
)a
WHERE uid NOT IN (
SELECT uid
from predfined_users
)
)=1
解决方案
像这样的东西:
select l.uip, count(distinct l.uid)
from log l left join
predefined_users pu
on l.uid = pu.uid
where pu.uid is null
group by l.uip;
推荐阅读
- node.js - 如何使用 mandrill 发送 mailchimp 模板?
- authentication - ASP.NET Web API 4.6.1 使用我们自己的外部应用程序进行外部身份验证(Like 和身份服务器)
- java - 使用 java/spring boot 将 openAPI 规范转换为 Postman 集合
- c - 有关此 C 代码如何工作的基本问题
- javascript - 在 Nextjs getStaticProps 执行之前如何做一些事情,例如拦截器?
- powershell - Powershell 数据文件名
- android - 如何在 React Native 中滚动返回选项卡视图时从父组件调用子组件方法?
- javascript - 在刷新页面时保持或“缓存”本地状态
- flutter - 如何在android studio中添加一个包-flutter?
- javascript - 如何将日期时间设置为 00 Javascript