我有一个关于嵌套查询的简单问题。 说实话,我不知道是否只能通过一个查询完成,或者我是否必须使用PHP。
简单地说,我想通过关系表中select语句返回的用户ID从users表返回用户信息。
我可以通过2个查询和一些PHP循环来实现这一点,但是为了节省资源,但我认为将它组合成1个查询和单个循环更好。
第一次查询
SELECT UserID FROM relations WHERE GroupID = '1'
第二个查询我需要通过第一个select语句中返回的UsersID从用户表中检索用户信息。
我可以通过循环访问ID并进行查询来完成此操作,但我想我可以在1个查询中完成所有操作。
由于
答案 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'