Jointuree

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Jointuree

par ZeRo[^L^]CoOOL » 07 juil. 2005, 15:03

Merciii effectivement
le prblm c que j'ai pas ajouté le nom de la deuxième table lors de la suppression mé bon vu que j'avais peur que je perd les données voila ce que j'ai fait:
g ajouté une collone a la table phpbb_posts_text qui s'apelle a, ensuite j'ai essayé de faire un update sur la valeur de cette collone après j'ai supprimé tous ceux qui n'ont pas la nvelle valeur
merci bcpss pour votre aide précieuse

par Augure » 07 juil. 2005, 14:40

Ouupsssss .... je corrige mon exemple.

Code : Tout sélectionner

create table T2 (id int , a char(20)); insert T2 values (1,'papa'); insert T2 values (2,'maman'); insert T2 values (3,'frere'); insert T2 values (4,'soeur'); create table T1 (id int); insert T1 values (2); insert T1 values (3); select * from T2; +------+-------+ | id | a | +------+-------+ | 1 | papa | | 2 | maman | | 3 | frere | | 4 | soeur | +------+-------+ -- SUPPRESSION delete T2 from T1 , T2 where T1.id = T2.id; select * from T2; +------+-------+ | id | a | +------+-------+ | 1 | papa | | 4 | soeur | +------+-------+

Par contre note que si aprés avoir ré initialiser la table T2, si tu lances

Code : Tout sélectionner

delete T2 from T1 , T2 where T1.id <> T2.id;
Alors toutes les lignes de T2 sont supprimées. En effet, pour chaque ligne de T2 il existe une ligne de T1 qui à id différent.

Pour visualiser les lignes que tu supprimes lance cette ordre :

Code : Tout sélectionner

select T2.* from T1 , T2 where T1.id <> T2.id;

Pour finir de répondre à ton probléme ; Pour supprimer toutes les lignes de T2 qui ne sont référencé dans T1.

Code : Tout sélectionner

delete from T2 where not exists (select 1 from T1 where T1.id = T2.id); select * from T2; +------+-------+ | id | a | +------+-------+ | 2 | maman | | 3 | frere | +------+-------+

par ZeRo[^L^]CoOOL » 07 juil. 2005, 12:17

oui cca la jointure se fait au niveau de la collone post_id
j'ai fait ça
DELETE FROM phpbb_post_text WHERE phpbb_post.post_id<>phpbb_post_text.post_id

par Augure » 07 juil. 2005, 12:13

La jointure ce fait sur post_id ou sur une autre colonne ?

Si jointure sur post_id, tu souhaites donc supprimer les phpbb_posts_text qui ont un post_id qui n'existe pas dans phpbb_posts ? C'est bien ça

par ZeRo[^L^]CoOOL » 07 juil. 2005, 11:57

En fait voila ce que je veut faire j'ai un phpbb je veut restaurer seulement un Forum je dois supprimer de la table phpbb_posts_text les messages qui ont a un post_id différent de celui qui est ds la table phpbb_posts

par ZeRo[^L^]CoOOL » 07 juil. 2005, 11:48

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE a.c<>b.c' at line 1 
la mm erreur :?

par Augure » 07 juil. 2005, 11:43

hum ... il est possible de faire des suppression en utilisant une sous requête.
Mais je présonise d'utiliser une ordre DELETE avec consition sur plusieurs table. C'est un peu plus rapide et plus simple (si nombre de table dans la query pas trop importante)


Synatxe DELETE : http://www.nexen.net/docs/mysql/annotee ... ien=delete

par mere-teresa » 07 juil. 2005, 11:33

par Augure » 07 juil. 2005, 11:27

Comme ça

Code : Tout sélectionner

DELETE b FROM a WHERE a.c=b.c
Cette ordre supprime tout les enregirstrement de la table b qui ont une correspondance dans a.

Cependant ta demande est :
Je vé le jetter par la fenetre , je veut supprimer tous les enregistrement d'une table qui n'ont pas la mm valeur qu'un de la deuxième table
cad la table a et b on un champs en commun qui est le champs c
voici la requete que j'utilise:
J'ai pas tout compris, donc je ne sais pas si l'ordre SQL que te donne fait ce que tu souhaites.

par mere-teresa » 07 juil. 2005, 11:12

As tu testé sur une table de test ?
Et puis là, tu lui parles d'une seule table dans le FROM, mais de deux tables dans les conditions : problème.

Jointuree

par ZeRo[^L^]CoOOL » 07 juil. 2005, 11:10

Bonjour
Je vé le jetter par la fenetre :( , je veut supprimer tous les enregistrement d'une table qui n'ont pas la mm valeur qu'un de la deuxième table
cad la table a et b on un champs en commun qui est le champs c
voici la requete que j'utilise:
DELETE FROM b WHERE a.c=b.c


Est ce que c'est vrai !!! :oops:

gracias