2012-07-18 189 views
3

我有一个关于嵌套查询的简单问题。 说实话,我不知道是否可以通过一个查询完成,或者如果我必须使用PHP。用双select语句嵌套mysql查询?

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

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

首先查询

SELECT UserID FROM relations WHERE GroupID = '1' 

第二个查询我需要从第一个SELECT语句返回UsersIDs来检索用户表中的用户信息。

我可以通过循环做这个ID并进行查询,但我想我可以得到所有的1查询。

感谢

+0

可以使用INNER JOIN? – 2012-07-18 11:18:47

+0

您应该使用MYSQL JOINS来满足您的要求。谢谢! – 2012-07-18 11:18:48

回答

5

这是做到这一点的典型方式:

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

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

使用IN子查询的答案可能性能较差。 ESP。对于MySQL,JOIN应该总是我们首选的方式来合并来自表的结果,因为MySQL的子查询实现尤其乏味。

2
select * from user_typw 
where userID in (SELECT UserID FROM relations WHERE GroupID = '1') 
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' 
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' 
0
SELECT * FROM user_table ut LEFT JOIN relations r on ut.UserID=r.UserID where r.GroupID=1; 
0

SELECT A.field1,B.field2 FROM表1左连接表2乙ON A.common_ID = B.common_ID WHERE字段= 'ABC'