2012-02-20 44 views
3

我需要通過他的ID來獲取用戶的年齡。簡單。 問題是,在我第一次不知道他們的ID時,我唯一知道的是它在一個特定的表中,讓我們將其命名爲「第二個」。一個查詢中的兩個select語句

SELECT `age` FROM `users` WHERE `userid`=(SELECT `id` FROM `second`) 

我該怎麼做?

+2

只是改變=在 – Vikram 2012-02-20 02:31:00

回答

6
SELECT age FROM users WHERE userid IN (SELECT id FROM second) 

這應該工作

+0

http://en.wikipedia.org/wiki/Correlated_subquery 再次我建議加入。 – Jordan 2012-02-20 02:56:47

1

你想 '在' 語句使用:

 
select * from a 
    where x=8 and y=1 and z in (
     select z from b where x=8 and active > '2010-01-07 00:00:00' group by z 
    ) 
2

SELECT age FROM users inner join Second on users.UserID = second.ID

內部聯接會比一個子選擇

更有效
+0

並非總是如此。除了效率,還有正確性。這個查詢和OP與'IN'子查詢不會產生相同的結果。 – 2012-02-20 02:41:39

+0

根據我的理解,只有當內部聯接沒有執行子查詢時,子查詢纔會被優化器更改爲內部聯接。在這種情況下,他們當然同樣運行。 出於好奇,我錯過了什麼,答案的領域不會是相同的? OP沒有用in指定子查詢,在我看來,OP正在使用一個僞代碼(授予非常接近正確)來表示他/她的需求。否則,我們可能只是說 WHERE Userid =(SELECT top 1 id FROM second)' – Jordan 2012-02-20 02:53:47

+1

'IN'與子查詢和'JOIN'的區別在於Join可能產生多個結果(在這種情況下許多相同的年齡) 。如果'id'是主鍵,那麼這不會發生。你說得對,在MySQL中,「IN」並沒有以最佳方式進行優化。但總的來說,「一個JOIN會比一個子選擇更有效」這句話不是事實。 – 2012-02-20 06:35:04

2
SELECT age FROM users WHERE userid IN (SELECT id FROM second) 

但優選

SELECT u.age FROM users u INNER JOIN second s ON u.userid = s.id