2010-01-08 139 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