Обновление Mysql + запрос ВЫБОРА
-
19-09-2019 - |
Вопрос
Я хочу обновить таблицу данных для тех, кто набрал экзаменационный идентификатор 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
.