Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1565 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Correction d'une requete SQL Delete....

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Correction d'une requete SQL Delete....

n°1544494
le_duc
PlaTyPuS
Posté le 18-04-2007 à 17:21:33  profilanswer
 

yop yop
 
qqn pourrais me corriger cette requete qui ne fonctionne pas ?  
 

Code :
  1. DELETE
  2. FROM ProfilesGroups pg, Groups g
  3. WHERE pg.tpGroupID = g.gId
  4.    AND pg.tpProfileID = '7df60fae-a026-4a0b-878a-0dd7e5308b09'
  5.    AND g.gProfileID = '8a6859ce-9f99-4aaf-9ed6-1af66cd15894'


 
En fait j'aimerais supprimer le profil x (ici 7df60fae-a026-4a0b-878a-0dd7e5308b09) de tous les groupes d'utilisateurs qui m'appartiennent (8a6859ce-9f99-4aaf-9ed6-1af66cd15894 = mon identifiant).
 
Merci, +++

mood
Publicité
Posté le 18-04-2007 à 17:21:33  profilanswer
 

n°1544514
zecrazytux
Posté le 18-04-2007 à 17:53:09  profilanswer
 

t'est sur de ça ?  pg.tpGroupID = g.gId


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1544707
le_duc
PlaTyPuS
Posté le 19-04-2007 à 08:30:47  profilanswer
 

zecrazytux a écrit :

t'est sur de ça ?  pg.tpGroupID = g.gId


 
euh.... bah c'est la relation entre les 2 tables koi

n°1544717
le_duc
PlaTyPuS
Posté le 19-04-2007 à 09:01:43  profilanswer
 

sur MSDN j'ai trouvé l'exemple suivant, mais impossible de l'appliquer à ma requete.... (si possible sans utiliser les INNER JOIN...)
 
DELETE FROM Sales.SalesPersonQuotaHistory  
FROM Sales.SalesPersonQuotaHistory AS spqh
    INNER JOIN Sales.SalesPerson AS sp
    ON spqh.SalesPersonID = sp.SalesPersonID
WHERE sp.SalesYTD > 2500000.00;
GO

n°1544807
jeriko6911
Posté le 19-04-2007 à 10:48:13  profilanswer
 

Ta requete ne marche pas fonctionnellement ou techniquement ? Tu cherche à l'executer sous quel sgbd ?

n°1544842
MagicBuzz
Posté le 19-04-2007 à 11:10:50  profilanswer
 

DELETE ne peut supprimer que dans une table à la fois.
Par contre, afin de gérer les relations entre les tables, on peut joindre cette table à d'autres.
 
Syntaxe SQL Server :
 

Code :
  1. DELETE ProfilesGroups
  2. FROM ProfilesGroups pg INNER JOIN Groups g ON tpGroupID = g.gId
  3. WHERE pg.tpProfileID = '7df60fae-a026-4a0b-878a-0dd7e5308b09'   AND g.gProfileID = '8a6859ce-9f99-4aaf-9ed6-1af66cd15894'


 
Cette syntaxe est propriétaire SQL Server, et ne fonctionne que sur ce produit. D'autres SGBD disposent de différentes syntaxes propriétaires aussi. Consulte donc la documentation du SGBD que tu utilises (à la version près !)
 
(ceci dit, je ne vois pas pourquoi tu utilises ça "pg.tpProfileID = '7df60fae-a026-4a0b-878a-0dd7e5308b09'" <- là tu ne supprimque qu'un truc)
 
Ensuite, pour supprimer tous les profiles d'un groupe par exemple, logiquement :
 
-> Dans la table des profiles t'as un champ indiquant le groupe. Donc tu peux aisément retrouver la liste des profils à supprimer, sans passer par le groupe.
-> Si c'est plus complexe, mais tes relations correctement écrite, et qu'en plus tu veux supprimer le groupe avec ses profiles, l'utilisation des fonctionnalités de "CASCADE CONSTRAINT" est particulièrement conseillée (standard)

n°1545036
le_duc
PlaTyPuS
Posté le 19-04-2007 à 13:35:52  profilanswer
 

MagicBuzz a écrit :

DELETE ne peut supprimer que dans une table à la fois.
Par contre, afin de gérer les relations entre les tables, on peut joindre cette table à d'autres.
 
Syntaxe SQL Server :
 

Code :
  1. DELETE ProfilesGroups
  2. FROM ProfilesGroups pg INNER JOIN Groups g ON tpGroupID = g.gId
  3. WHERE pg.tpProfileID = '7df60fae-a026-4a0b-878a-0dd7e5308b09'   AND g.gProfileID = '8a6859ce-9f99-4aaf-9ed6-1af66cd15894'


 
Cette syntaxe est propriétaire SQL Server, et ne fonctionne que sur ce produit. D'autres SGBD disposent de différentes syntaxes propriétaires aussi. Consulte donc la documentation du SGBD que tu utilises (à la version près !)
 
(ceci dit, je ne vois pas pourquoi tu utilises ça "pg.tpProfileID = '7df60fae-a026-4a0b-878a-0dd7e5308b09'" <- là tu ne supprimque qu'un truc)
 
Ensuite, pour supprimer tous les profiles d'un groupe par exemple, logiquement :
 
-> Dans la table des profiles t'as un champ indiquant le groupe. Donc tu peux aisément retrouver la liste des profils à supprimer, sans passer par le groupe.
-> Si c'est plus complexe, mais tes relations correctement écrite, et qu'en plus tu veux supprimer le groupe avec ses profiles, l'utilisation des fonctionnalités de "CASCADE CONSTRAINT" est particulièrement conseillée (standard)


 
Hello! Merci pour ta réponse! J'utilise bien SQL, mais dans sa version "Compact Edition"
 
La requete que tu proposes ne fonctionne pas... je suis en-train de me demander si c'est pas une limitation au niveau de SQLce...
 
J'ai 3 tables :
 
Profiles

  • id
  • login
  • pass


Goups

  • id
  • owner (= id du profile à qui appartient le groupe)
  • name


ProfilesGroups

  • profileId
  • groupId


Un profile peut donc faire parti de plusieurs groupes (qui eux appartiennent à la même personne(profile)).
 
Donc lorsque la personne supprime un profile, je lui demande si elle veut supprimer ce profil uniquement du groupe actuel ou de tous les groupes ou il apparait (-> la requete de ce post devrait fonctionner pour une suppression du profile dans tous les groupes (appartenant à la personne...)!)
 
Merci pour votre aide ;)
 
++


Message édité par le_duc le 19-04-2007 à 13:37:28
n°1545052
jeriko6911
Posté le 19-04-2007 à 13:44:34  profilanswer
 

Sympa le duc deviter ma question, continue à m'ignorer PAUVRE TYPE

n°1545079
le_duc
PlaTyPuS
Posté le 19-04-2007 à 14:04:30  profilanswer
 

jeriko6911 a écrit :

Sympa le duc deviter ma question, continue à m'ignorer PAUVRE TYPE


 
bah je t'ai répondu la 1ere fois.... et la 2e je l'ai pas vu!
 
T'as une partie de la réponse dans mon post précédant (SQL Compact Edition) et l'erreur retournée est la suivante (avec la requete proposée par MagicBuzz) :
 
Major Error 0x80040E14, Minor Error 25501
> DELETE  
FROM ProfilesGroups pg  
INNER JOIN Groups g ON tpGroupID = g.gId
WHERE pg.tpProfileID = '7df60fae-a026-4a0b-878a-0dd7e5308b09'
  AND g.gProfileID = '8a6859ce-9f99-4aaf-9ed6-1af66cd15894'
There was an error parsing the query. [ Token line number = 2,Token line offset = 21,Token in error = pg ]
 
....

n°1545092
MagicBuzz
Posté le 19-04-2007 à 14:11:18  profilanswer
 

Effectivement, SQL Server CE est TRES limité.
 
Je pense que le plus simple, c'est de faire un SELECT pour retrouver les lignes à supprimer, puis les supprimer une à une.
 
J'ai pas de SQL Server CE sous la main, et en plus c'est la tanée pour faire des tests dessus, donc chaud les marrons pour trouver mieux.
 
L'intérêt de faire ça, même si c'est pas ce qu'il y a de plus propre, c'est que tu es sûr que ça marche, même si demain tu déploies ton application avec autrechose que SQL Server CE ou une autre version du produit.
 
PS : Je ne sais plus s'il supporte les transactions. Si c'est le cas, surtout utilises-en une. Ca évitera d'avoir des données instables en cas d'erreur.

mood
Publicité
Posté le 19-04-2007 à 14:11:18  profilanswer
 

n°1545389
le_duc
PlaTyPuS
Posté le 19-04-2007 à 18:33:48  profilanswer
 

MagicBuzz a écrit :

Effectivement, SQL Server CE est TRES limité.
 
Je pense que le plus simple, c'est de faire un SELECT pour retrouver les lignes à supprimer, puis les supprimer une à une.
 
J'ai pas de SQL Server CE sous la main, et en plus c'est la tanée pour faire des tests dessus, donc chaud les marrons pour trouver mieux.
 
L'intérêt de faire ça, même si c'est pas ce qu'il y a de plus propre, c'est que tu es sûr que ça marche, même si demain tu déploies ton application avec autrechose que SQL Server CE ou une autre version du produit.
 
PS : Je ne sais plus s'il supporte les transactions. Si c'est le cas, surtout utilises-en une. Ca évitera d'avoir des données instables en cas d'erreur.


 
il ne supporte pas les transactions malheureusement ;)

n°1545606
le_duc
PlaTyPuS
Posté le 20-04-2007 à 11:21:32  profilanswer
 


Je confirme que SQL CE ne supporte pas les delete impliquant plusieurs tables!
 
Il faut donc faire plusieurs requetes séparées pour arriver à ce résultat ;-).
 
++


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Correction d'une requete SQL Delete....

 

Sujets relatifs
Variable dans macro Excel et requête SQLRequête MAX sur MySQL
Probleme de requête (group by)[PostGreSQL] Inserer une requete dans un champ ?
[SQL] Aide sur un WHEREPHP+SQL afficher 5 news et avoir accès aux autres...
Requête multi let joinContrôler une base SQL depuis Excel
Requête mysql marche sauf pour une condition .... 
Plus de sujets relatifs à : Correction d'une requete SQL Delete....


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR