2010-01-08 9 views
2

Je veux mettre à jour le tableau de données pour ceux qui obtiennent id examen 1,2 plus de 80. J'essaie cetteMise à jour Mysql + SELECT requête

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

Il me donne 0 résultat. Mais il devrait avoir quelques centaines de résultats ANY aide ??

Je pense que le problème est le suivant:

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

Il donne 0 résultat. Comment sélectionner ceux qui obtiennent plus de 80 points pour l'examen 1 et 2?

+0

vous devriez fournir plus d'informations sur vos données – Rockcoder

+0

Quel type de données? – mysqllearner

+0

tables et colonnes que vous utilisez – Rockcoder

Répondre

7

requête Vous ne fonctionnera pas parce que vous vous demandez examens qui ont id = 1 ET id = 2.

En supposant que id ne peut pas tenir deux valeurs en même temps, vous ne jamais retourner de résultats.

Essayez comme base de votre mise à jour à la place: -

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

Modifié basé sur le commentaire: -

utilisateur veut que les personnes qui ont obtenu plus de 80 pour les deux examens. En supposant que personid est une clé pour la personne qui a passé l'examen.

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

c'est la bonne façon de s'y prendre. –

+0

erm .. J'ai testé. Mais un utilisateur, il ne note que l'examen 1 que plus de 80, mais cette requête donne toujours le résultat. Mon exigence est, l'utilisateur doit marquer plus de 80 pour les deux examens 1 et 2. L'un ou l'autre en dessous de 80 ne devrait pas inclure – mysqllearner

+0

Voir si le code ci-dessus fonctionne pour vous. –

2

Je crois que votre instruction select devrait utiliser un OU:

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

Je pense que cela ne fonctionne pas. L'utilisateur doit répondre à 2 exigences. L'examen 1 et 2 doit être supérieur à 80. Ur requête retour examen 1 ou examen 2 même l'utilisateur score score 1 examen supérieur à 80 – mysqllearner

+0

Gotcha. Paul Alan Taylor a votre réponse alors. –

0

Essayez ceci:

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

Parce que vous ne pouvez pas avoir id ='1' et id = '2' simultanément le nombre de valeurs renvoyées dans votre cas est 0.