2017-05-28 61 views
0

假設我有一個成績表是這樣的:SQL選擇其中id = 1的條件其中id = 2

| exam | score | user_id | 
| 1 | 78 | 1  | 
| 2 | 80 | 1  | 
| 1 | 27 | 2  | 
| 2 | 90 | 2  | 

我想選擇所有結果,其中考試= 2,但在相同的用戶得到至少50在第一次考試中。

因此,例如,這樣的事(我知道這是什麼接近SQL):

SELECT * from results r WHERE (for r.user WHERE r.exam = 2 FIND r.exam = 1 REQUIRE score > 50) AND r.exam = 2. 
+0

你是什麼意思,其中考試= 2和第一次考試是什麼第一構成做? – Mihai

+0

我想根據第一次考試的分數限制第二次考試的結果。 – Dan

回答

1

首先,選擇了一個標記大於或小於第一exam.Then 50等於所有的用戶加入基於user_id表。

SELECT * 
FROM Table 
WHERE user_id IN(
    SELECT T.user_id 
    FROM Table T 
    WHERE T.exam_id=1 
    AND T.score >= 50) 
AND exam_id =2; 
+0

「*至少50 *」... – steffen

+0

更改爲'> ='@steffen – alejandrogiron

+1

最後應該是'exam_id = 2' ... – steffen

2

就像你有問題我會表達這樣的:

select r.* 
from results r 
where r.exam = 2 and 
     exists (select 1 
       from results r2 
       where r2.userid = r.userid and 
        r2.exam = 1 and r2.score >= 50 
      ); 
+0

這是非常可怕的upvoting,但alejandrogirons的回答最終是我作爲noob sqler的第一個,最方便的答案:) – Dan

+0

@丹。 。 。作爲OP,你可以選擇你喜歡的任何答案。我會指出,亞歷杭德羅的原始答案是不正確的,他在我回答五分鐘後修改了它。 –

+0

的確如此,但是當我閱讀你的答案時,我已經用他的答案得到了一個充分的解決方案。再次感謝這個驚人的SO幫助,並從您的答案中學習。 – Dan