3

我有一个关于嵌套查询的简单问题。老实说,我不知道它是否只能通过一个查询来完成,或者我是否必须使用 PHP。

简而言之,我想通过关系表中的 select 语句返回的用户 ID 从用户表中返回用户信息。

我可以通过 2 个查询和一些 PHP 循环来做到这一点,但为了节省资源,但我认为最好将它组合成 1 个查询和单个循环。

第一次查询

SELECT UserID FROM relations WHERE GroupID = '1'

第二个查询我需要通过第一个 select 语句返回的用户 ID 从用户表中检索用户信息。

我可以通过循环遍历 ID 并进行查询来做到这一点,但我认为我可以在 1 个查询中获得所有信息。

谢谢

4

6 回答 6

5

这是执行此操作的典型方法:

SELECT     users.*
FROM       users
INNER JOIN relations
ON         users.id = relations.userid
WHERE      relations.groupid = 1

我注意到您在查询中使用了 1 周围的引号。我假设组 id 是一个整数值,在这种情况下你不应该使用引号。

使用 IN 子查询的答案可能性能较差。特别是。对于 MySQL,JOIN 应该始终是我们合并表结果的首选方式,因为 MySQL 的子查询实现特别乏善可陈。

于 2012-07-18T11:21:12.043 回答
3
Select * from user_table where id in(SELECT UserID FROM relations WHERE GroupID = '1')
                                   OR
Select * from user_table u INNER JOIN relations r ON u.UserID=r.UserID WHERE r.GroupID='1'
于 2012-07-18T11:18:45.233 回答
2
select * from user_typw 
where userID in (SELECT UserID FROM relations WHERE GroupID = '1')
于 2012-07-18T11:18:26.120 回答
1

试试这个

select * from user where UserID  in
(SELECT UserID FROM relations WHERE GroupID = '1')

或者

select * from user U where exists 
(SELECT * FROM relations R WHERE U.UserID=R.UserID and  R.GroupID = '1')

或者

select U.*
from user U join relations R 
on U.UserID=R.UserID 
where  R.GroupID = '1'
于 2012-07-18T11:18:47.860 回答
0
SELECT * FROM user_table ut LEFT JOIN relations r on ut.UserID=r.UserID where r.GroupID=1;
于 2012-07-18T11:20:02.577 回答
0

SELECT A.field1,B.field2 FROM table1 A LEFT JOIN table2 B ON A.common_ID=B.common_ID WHERE field = 'abc'

于 2012-07-18T11:21:32.563 回答