假设我有一个名为 users 的表,它具有以下值: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 个查询中压缩整个事情一样?我知道这对 2 条语句可能听起来很傻,但是每个 cpu 周期对我的程序都很重要,尤其是在一个相当慢的平台上。
问问题
92 次
3 回答
2
如果我理解正确,您正在寻找的查询的问题是Find me all users who share the same ip as userX。如果是这种情况,那么您可以使用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-12T03:34:41.963 回答
0
看起来您正在执行两次相同的查询,以下示例显示了一个嵌套选择,它是一个非常多余的示例,但它显示了您想要的(我认为)
SELECT user FROM users
WHERE user = (SELECT user FROM users
WHERE ip = "xxx.xxx.xxx.xx[x]");
在此查询中,子查询实际上将返回与外部查询相同的结果,因此毫无意义。
于 2013-09-12T03:32:48.570 回答
-1
我想你可以像这样使用子查询:从用户中选择用户,其中 ip 在(从用户中选择 ip,用户喜欢“%user%”)
于 2013-09-12T03:30:46.020 回答