2015-06-04 87 views
0

原諒這個長度,這很難解釋!SQL SELECT WHERE子查詢(多行)=子查詢(多行)

我有兩個表:

t_people 
---------------------------------------- 
| ID  | surname | forenames | 
---------------------------------------- 
| 1  | Baggins | Frodo  | 
---------------------------------------- 
| 2  | Took  | Peregrin | 
---------------------------------------- 
| 3  | Baggins | Bilbo  | 
---------------------------------------- 

t_courseResults 
-------------------------- 
| personID | result | 
-------------------------- 
| 1  | 98.0%  | 
-------------------------- 
| 2  | 14.0%  | 
-------------------------- 
| 3  | 56.0%  | 
-------------------------- 

我然後執行以下語句:

SELECT result FROM t_courseResults WHERE personID IN (SELECT ID FROM t_people WHERE surname like '%B') 

...返回所有的課程結果所有的人以姓氏以「B」開頭(2行)。

現在讓我們假設我有存儲的人的靜態列表(例如,在一個特定的部門的人名單)

t_staticList 
------------- 
| personID | 
------------- 
| 2  | 
------------- 
| 3  | 
------------- 

然後我會想這樣執行的東西第三張表:

SELECT result FROM t_courseResults WHERE (SELECT personID FROM t_staticList) IN (SELECT ID FROM t_people WHERE surname like '%B') 

這顯然是垃圾,但是這樣的事情可能或我是愚蠢的?這個想法是,這將返回1行 - 比爾博巴金斯 - 因爲他的名字以'B'開頭,他在t_staticList表中。謝謝!

+0

將您的預期輸出置於您的問題中,它將使您更容易解決 – Matt

+0

並在其中放置所有表格 – Matt

+0

只需做表之間的內連接。 –

回答

0

您的意思是?

SELECT result FROM t_courseResults WHERE PersonId IN (
    SELECT p.ID FROM t_staticList AS s 
    INNER JOIN t_people as p ON p.ID = s.PersonId 
    WHERE p.surname like '%B') 
1

USe INNER JOIN

SELECT A.result 
FROM t_courseResults AS A, t_staticList AS B 
    INNER JOIN t_people AS C ON c.id = B.personID 
WHERE c.surname like '%B' 
0

如果我理解正確,你正在嘗試做這樣的事情:

SELECT result 
FROM t_courseResults 
WHERE personID IN 
    (SELECT p.ID FROM t_people p INNER JOIN t_staticList s ON p.PersonID = s.PersonID WHERE surname like '%B') 
0

SELECT * FROM t_people一個內部上加入t_courseResults乙A.ID = B.personID 內上加入t_staticListÇ C.personID = B.personID和A.surname like('B%')