2010-01-08 91 views
2

我想更新數據表對於那些誰得分考試ID 1,2比80更多我試試這個Mysql的更新+ SELECT查詢

UPDATE data 
SET 
column = 'value' 
WHERE 
(SELECT * FROM exams 
WHERE (id = '1' AND score >= 80) AND (id = '2' AND score >= 80)); 

它給我0的結果。但它應該有幾百個結果ANY幫助?

我認爲這個問題是這樣的:

SELECT * FROM exams 
WHERE (id = '1' AND score >= 80) AND (id = '2' AND score >= 80) 

它給0的結果。如何選擇考試1和2分均超過80分的考生?

+0

你應該提供關於你數據的更多信息 – Rockcoder 2010-01-08 13:33:10

+0

什麼樣的數據? – mysqllearner 2010-01-08 13:34:21

+0

您正在使用的表格和列 – Rockcoder 2010-01-08 13:35:51

回答

7

您的查詢將不能工作,因爲你問考試有ID = 1 ID = 2

假設ID在同一時間不能容納兩個值,你會永不返回任何結果。

試試這個作爲你更新的基礎上,而不是: -

SELECT * FROM exams 
WHERE score >= 80 AND id IN ('1','2') 

編輯基於評論: -

用戶只需要對誰既考試得分超過80人。假設personid是參加考試的人的關鍵。

SELECT e1.personid FROM 
(
    SELECT personid FROM exams WHERE score >= 80 AND id = '1' 
) e1 
INNER JOIN 
(
    SELECT personid FROM exams WHERE score >= 80 AND id = '2' 
) e2 
ON 
    e1.personid = e2.personid 
+0

這是正確的做法。 – 2010-01-08 13:42:34

+0

恩..我測試過。但是一個用戶,他只能得到高於80的考試1,但是這個查詢仍然給出了結果。我的要求是,用戶必須在考試1和2中獲得80分以上的成績。80以下的任何一個都不應包含 – mysqllearner 2010-01-08 13:50:27

+0

請參閱上述代碼是否適合您。 – 2010-01-08 14:03:20

2

我相信你的SELECT語句應使用OR:

SELECT * FROM exams 
WHERE (id = '1' AND score >= 80) OR (id = '2' AND score >= 80) 
+0

我認爲這是行不通的。用戶必須滿足2個要求。考試1和2必須在80以上。烏爾查詢返回考試1或考試2甚至用戶只考分1以上80 – mysqllearner 2010-01-08 13:47:23

+0

Gotcha。那麼保羅艾倫泰勒已經有了答案。 – 2010-01-08 14:49:34

0

試試這個:

SELECT * FROM exams 
WHERE (id = '1' OR id = '2') AND score >=80 

因爲你不能有id ='1'id = '2'同時在你的情況下返回值的數量是0