2

我想为那些考试 id 1,2 超过 80 的人更新数据表。我试试这个

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

它给了我 0 结果。但它应该有几百个结果有什么帮助吗?

我认为问题是这样的:

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

它给出 0 结果。1、2考试都在80分以上的怎么选??

4

3 回答 3

7

您的查询将不起作用,因为您要求的考试id = 1 AND 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
于 2010-01-08T13:37:44.347 回答
2

我相信您的选择语句应该使用 OR:

SELECT * FROM exams
WHERE (id = '1' AND score >= 80) OR (id = '2' AND score >= 80)
于 2010-01-08T13:38:18.260 回答
0

试试这个:

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

因为您不能同时拥有id ='1'id = '2'您的案例中返回的值的数量是0.

于 2010-01-08T13:42:15.843 回答