Вопрос

Я хочу обновить таблицу данных для тех, кто набрал экзаменационный идентификатор 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 результатов.Как отобрать тех, кто набрал более 80 баллов как за экзамен 1, так и за экзамен 2??

Это было полезно?

Решение

Ваш запрос не сработает, потому что вы просите экзамены которые имеют id = 1 И идентификатор = 2.

Предполагая, что id не может содержать два значения одновременно, вы никогда не вернете никаких результатов.

Вместо этого попробуйте использовать это в качестве основы вашего обновления :-

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

Отредактировано на основе комментария :-

Пользователю нужны только люди, набравшие более 80 баллов за и то, и другое экзамены.Предполагая идентификатор лица это ключ к человеку, который сдавал экзамен.

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

Другие советы

Я считаю, что в вашем операторе select следует использовать OR:

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

Попробуй это:

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

Потому что вы не можете иметь id ='1' и id = '2' одновременно количество значений, возвращаемых в вашем случае, равно 0.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top