2012-07-18 139 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'