嵌套的mysql查询与双精选语句?

时间:2012-07-18 11:16:15

标签: php mysql

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

简单地说,我想通过关系表中select语句返回的用户ID从users表返回用户信息。

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

第一次查询

SELECT UserID FROM relations WHERE GroupID = '1'

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

我可以通过循环访问ID并进行查询来完成此操作,但我想我可以在1个查询中完成所有操作。

由于

6 个答案:

答案 0 :(得分:5)

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

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

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

使用IN子查询的答案可能性能较差。 ESP。使用MySQL,JOIN应该始终是组合表结果的首选方法,因为MySQL具有特别缺乏的子查询实现。

答案 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'

答案 2 :(得分:2)

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

答案 3 :(得分: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'

答案 4 :(得分:0)

SELECT * FROM user_table ut LEFT JOIN relations r on ut.UserID=r.UserID where r.GroupID=1;

答案 5 :(得分:0)

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