注意:我很难为这个问题选择标题。我不确定它能准确地描述我想要的内容,因此,如果您能帮助改善标题,而不是落选,我将不胜感激。 :)
我有一个具有以下结构的表:
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
中。另外,值得注意的是,如果uip
仅与一个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
答案 0 :(得分: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;
答案 1 :(得分:-1)
您可以使用此查询来检索只有一个关联uid在表predfined_users中不存在的uips:
Select distinct uip from [dbo].[Log]
where uid not in(Select uid from predfined_users)
group by uip
having count(uip) = 1
如果要检索具有不存在关联的ui,而不考虑无关uid的数量,则可以使用以下代码:
Select distinct uip from [dbo].[Log]
where uid not in(Select uid from predfined_users)