因此,假设我有一个名为user的表,其值如下: ip、id和user。如果我想获得基于ip的所有用户,但没有ip,那么我首先执行select ip from users where user = "user";,然后执行select user from users where ip = "xxx.xxx.xxx.xx[x]"; (x是从第一个查询获得的ip号)。难道没有一种方法可以像select user from users where ip = "[insert ip query here to get ip]"那样在1查询中压缩全部内容吗?我知道这听起来可能很傻,但每一个cpu周期对我的程序都很重要,尤其是在一个相当慢的平台上。
发布于 2013-09-12 03:34:41
如果我正确地理解了您要查找的查询的一个问题,请找到所有与userX共享相同ip的用户。如果是这样的话,那么您可以使用JOIN来完成它。
SELECT DISTINCT u1.user
FROM users u1 JOIN users u2
ON u1.ip = u2.ip
WHERE u2.user = 'some_user';或带有子查询
SELECT user
FROM users
WHERE ip IN
(
SELECT DISTINCT ip
FROM users
WHERE user = 'some_user'
);或使用EXISTS
SELECT DISTINCT u.user
FROM users u
WHERE EXISTS
(
SELECT *
FROM users
WHERE ip = u.ip
AND user = 'some_user'
);注意:确保您在ip和user上有索引。
这是SQLFiddle演示
发布于 2013-09-12 03:32:48
看起来您执行了两次相同的查询,下面的示例显示了一个嵌套的select,它是一个难以置信的冗余示例,但它显示了您想要的(我认为)
SELECT user FROM users
WHERE user = (SELECT user FROM users
WHERE ip = "xxx.xxx.xxx.xx[x]");在这个查询中,子查询实际上将返回与外部查询相同的内容,因此没有意义。
发布于 2013-09-12 03:30:46
我想你可以像这样使用子查询:从ip所在的用户中选择用户(从用户中选择ip,比如"% user %")
https://stackoverflow.com/questions/18754710
复制相似问题