Aide sur la création d'une requête SQL
Bonjour a tous,
Je suis un débutant sur SQL et j'aurai besoin de votre aide pour la création d'une requête qui pour moi me parait hyper difficile. J’espère de tout cœur que quelqu'un pourra m'aider dessus. JE dis merci d'avance pour celui qui m'apportera son aide et son temps.
J'explique ce dont j'ai besoin:
J'ai une table "CLIENT" qui contient les champs suivants:
CODE, NOM, TEL, LISTE, STATUS
Exemple 1:
CODE |
NOM |
TEL |
LISTE |
STATUS |
0001 |
rasbenny |
0123456789 |
5001 |
OK RDV |
0002 |
bob |
0187654321 |
5999 |
NEW |
0003 |
stacy |
0452639871 |
5013 |
PAS INTERESSE |
0004 |
bob |
0187654321 |
5024 |
DROP |
Je dois créer une requête de mis a jour pour changer les status a "XX" sur toutes les fiches ou les conditions suivantes sont réunis:
- Dans le champ LISTE ou elle n'est pas égale a 5999.
- Dans le champ TEL ou les numéros de téléphone sont identique.
Exemple 2:
Les fiches CODE = 0002 et 0004, NOM = bob, TEL = Le numéro de téléphone sont identiques, LISTE = 5999 et 5024, STATUS = NEW et DROP.
Il faut que le STATUS de la fiches CODE = 0004 dont la LISTE = 5024 soit mis a jour a "XX". Et que la fiche CODE = 5999 reste tel quel sans modification.
J’espère avoir été assez précis mais si tel n'a pas été le cas, je reste disponible a toutes vos questions.
Encore une fois MERCI pour votre temps et votre aide
Très Cordialement
Rasbenny.
Aide sur la création d'une requête SQL
Re bonjour,
Merci pour vos réponses.
J'ai corriger et lancer, par contre cette fois j'ai le message d'erreur suivant:
Citation:
Erreur SQL (1093) : la table 'vicidial_list' est spécifiée deux fois, à la fois comme cible pour 'UPDATE' et comme source distincte pour les données.
Ma requête ressemble à cela maintenant:
Code:
1 2 3 4 5 6 7 8 9
| UPDATE vicidial_list
SET vicidial_list.status = 'XX - A NE PAS APPELER'
WHERE vicidial_list.phone_number
IN ( SELECT phone_number
FROM vicidial_list As Tmp
GROUP BY phone_number
HAVING COUNT(*) > 1
)
AND vicidial_list.list_id <> '5999' ; |
Merci encore pour vos aides. Juste une autre petite questions, la requête est bien pour supprimer les fiches des autres listes ou les numéros de téléphone sont identiques à celles se trouvant dans la liste 59999?
Très Cordialement
Rasbenny
Aide sur la création d'une requête SQL
Re,
Citation:
Envoyé par escartefigue
De ce que je comprends, en cas de doublon sur le n° de téléphone, la ligne ayant pour la colonne list_id la valeur '5999' est inchangée et les lignes dont la colonne list_id a une valeur différente de '5999' sont mises à jour.
Si c'est bien ça, plutôt que d'utiliser un regroupement, utilisez un test d'existence, ce sera plus performant.
Et aussi, utilisez des alias de table(VL et V2 ci-dessous), c'est plus pratique que des noms in extenso :
Oui effectivement c'est bien cela.
J'ai corriger la requête comme indiquer dans votre exemple, mais malheureusement j'ai le même message d'erreur c'est a dire:
Erreur SQL (1093) : la table 'VL' est spécifiée deux fois, à la fois comme cible pour 'UPDATE' et comme source distincte pour les données.
Ma requête est désormais somme suite:
Code:
1 2 3 4 5 6 7 8 9
| UPDATE vicidial_list VL
SET VL.status = 'XX - A NE PAS APPELER'
WHERE VL.list_id<>'5999'
AND EXISTS
(select 1
from vicidial_list V2
where V2.phone_number =VL.phone_number
and V2.list_id = '5999'
) ; |
Donc, comme vous pouvez le constater les deux manières de faire me renvoie la même erreur. Avez vous une idée de comment corriger cela svp?
Tres Cordialement
Rasbenny
Aide sur la création d'une requête SQL
Re,
J'utilise HeidiSQL
Version 11.2.0.6213 (64bit)
Environnement: Windows v6.1
J'effectue tous les requêtes SQL pour mes différentes taches dessus. C'est a dire: pour aller chercher les données, les mettre a jour, les supprimes etc sur mon serveur asterisk.
Tres Cordialement
Rasbenny
Aide sur la création d'une requête SQL
Re,
Cette fois elle a fonctionner.
En ce qu'il s'agit d'une version recente de MYSQL, j'aurai besoin d'aide pour la mette en place.
Si toutefois il vous est possible de m'aider a le mettre en place, faites le moi savoir s'il vous plait.
Dites moi ce que je dois faire et je le ferai.
Encore une fois merci pour votre aide.
Pour finir, maintenant si je veux visualiser les mises a jour qui ont ete effectues, je modifie comment la requete pour qu'elle devienne une requete SELECT, svp?
Tres Cordialement
Rasbenny
Aide sur la création d'une requête SQL
Re,
Citation:
Envoyé par escartefigue
En tout cas un test d'existence avec EXISTS reste préférable à la solution se basant sur IN + GROUP BY.
Pour être sincère, c'est du chinois a ce stade. Mais ce soir a la maison, j'aurai le temps d'aller chercher dans les cours en lignes les explications et je vais tout mettre etape par etape de tous ce que vous avez mentionnes pour essayer de mieux comprendre.
C'est la premiere fois que j'utilise EXIST dans une requete, d'ou la raison de ma question, si maintenant je veux visualiser les mises a jourr qui ont ete effectues, quels sont par exemples les fiches dont le champ status a changer et est desormais XX - A NE PAS APPELER et quel liste_id elle appartient. Comment est ce que je dois modifier cette requete:
Est ce que la requete ci-desosus est correcte svp?
Code:
1 2 3 4 5 6 7 8 9 10 11
| SELECT * FROM vicidial_list lst
WHERE lst.list_id <> '5999'
AND EXISTS
( SELECT 1
FROM ( SELECT phone_number
FROM vicidial_list
WHERE list_id = '5999'
) exc
WHERE exc.phone_number = lst.phone_number
)
; |
Merci encore pour votre precieuse aide.
Tres Cordialement
Rasbenny.
Aide sur la création d'une requête SQL
Re,
Ah d'accord j'ai compris maintenant.
Encore merci pour tous et bon courage.
Tres cordialement
Rasbenny