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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] L'id du fichier n'existe pas dans la table rubrique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] L'id du fichier n'existe pas dans la table rubrique

n°212382
manuuu
Posté le 11-09-2002 à 18:08:22  profilanswer
 

j'explique....
j'ai deux tables liées :
 
fichiers
et  
rubriques
 
dans fichier ya un champ : id_rub, qui en fait, dis à quelle rubrique est attaché le fichier
 
j'aimerai faire une requete, pour :  
chercher dans rubrique les id_rub qui ne corréspondent à rien
 
genre j'efface l'id "3" de la table rubrique, je vais avoir des fichiers avec "id_rub" qui existent toujours
j'en veux la liste...
 
en gros, je recherche les orphelins et je veux conserver la liste
 
je m'exprimer mal c grave
 
mais bon, please, aidez moi !!
merci :D


Message édité par manuuu le 11-09-2002 à 18:09:26
mood
Publicité
Posté le 11-09-2002 à 18:08:22  profilanswer
 

n°212389
Agagax
Posté le 11-09-2002 à 18:28:41  profilanswer
 

oui tu t'exprimes mal  ;)  
 
Mais si j'ai compris ta demande pour les orphelins, essaye ça:
select * from fichier
where id_rub not in (select id_rub from rubrique)
 
Il y a plein d'autres moyens de faire la même chose.
Ca dépend aussi du dialecte SQL que t'utilises (quelle DB?)
Le mieux quand même est de mettre un containte d'intégrité sur id_rub, comme ça t'évites de créer des orphelins dans fichier.
 

n°212515
manuuu
Posté le 11-09-2002 à 23:54:40  profilanswer
 

salut et merci
c quoi intégrité ?
en fait c du mysql
et je veux verifier par rapport à deux bases
 
comment faire la liaison ?

n°212637
manuuu
Posté le 12-09-2002 à 09:47:12  profilanswer
 

Code :
  1. select DISTINCT site_fichiers.nom_fichier,
  2.                 site_fichiers.titre_fichier,
  3.      site_fichiers.id_fichier,
  4.                 site_fichiers.id_rubrique,
  5.                 site_rubriques.id_rubrique, 
  6.        SUBSTRING(titre_fichier,1,30) as titre_reduit2
  7.      FROM site_fichiers, site_rubriques
  8.  WHERE site_fichiers.id_rubrique NOT IN site_rubriques.id_rubrique
  9.        ORDER by nom_fichier


 
voici ma requete et ça marche pas :'(


Message édité par manuuu le 12-09-2002 à 09:48:34
n°212645
_Mac_
Posté le 12-09-2002 à 09:52:38  profilanswer
 

Je pense que c'est ton "NOT IN" qui ne passe pas. Généralement, on utilise un NOT IN avec un liste entre parenthèses ou une sous-requête.

n°212647
manuuu
Posté le 12-09-2002 à 09:54:20  profilanswer
 

oui je lis la doc là, il me dit de faire:
 
select * FROM site_fichiers WHERE id_rubrique NOT IN (SELECT id_rubrique FROM site_rubriques) ORDER by nom_fichier

n°212649
manuuu
Posté le 12-09-2002 à 09:56:26  profilanswer
 

ok juste au dessus dans la doc ya marqué :  
 
"La requête suivante ne fonctionne par encore sous MySQL"
 
sniiiiiiiiiiiifffffffffffffffff
 
POUR LES INTERESSES voici ce qui fonctionne :  
 
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL


Message édité par manuuu le 12-09-2002 à 09:58:55
n°212711
Agagax
Posté le 12-09-2002 à 11:02:04  profilanswer
 

Bah si le IN ne fonctionne pas sous mysql, c'est bien dommage :(  
désolé, je connais le sql de cette base.
 
Utilise effectivement la jointure externe LEFT JOIN.  
Eventuellement en utilisant une clause d'existence, faut voir si ça passe en mysql et si c'est pas trop long.
En reprenant ta requête du dessus, ça donnerait quelque chose comme ça:
 
select a.nom_fichier,  
       a.titre_fichier,  
       a.id_fichier,  
       a.id_rubrique,  
       SUBSTRING(a.titre_fichier,1,30) as titre_reduit2  
from site_fichiers a  
where not exists (select 'x' from site_rubriques b
                  where b.id_rubrique=a.id_rubrique)  
order by a.nom_fichier  
 
Sinon les contraintes d'intégrité, c'est un des principes des BDD relationnelles permettant de garder une base intègre.
Pour faire simple, ça t'évite les orphelins, ça assure une certaine cohérence des données et ça simplifie la maintenance de la base.
Dans ton cas, id_rubrique de la table site_fichier est une clé étrangère provenant de la table site_rubriques (dans laquelle id_rubrique est alors clé primaire). En mettant une contrainte de clé étrangère sur id_rubrique, tu empêches ainsi l'effacement accidentel des lignes dans site_rubrique dont l'id_rubrique est utilisé dans site_fichier, donc t'évites de faire des orphelins dans site_fichier.
Reste à voir si les contraintes existent sous mysql.
 
a pluche...

n°212728
joce
Architecte / Développeur principal
"BugHunter"
Posté le 12-09-2002 à 11:13:45  profilanswer
 

Agagax a écrit a écrit :

Bah si le IN ne fonctionne pas sous mysql, c'est bien dommage :(  
désolé, je connais le sql de cette base.
 
Utilise effectivement la jointure externe LEFT JOIN.  
Eventuellement en utilisant une clause d'existence, faut voir si ça passe en mysql et si c'est pas trop long.
En reprenant ta requête du dessus, ça donnerait quelque chose comme ça:
 
select a.nom_fichier,  
       a.titre_fichier,  
       a.id_fichier,  
       a.id_rubrique,  
       SUBSTRING(a.titre_fichier,1,30) as titre_reduit2  
from site_fichiers a  
where not exists (select 'x' from site_rubriques b
                  where b.id_rubrique=a.id_rubrique)  
order by a.nom_fichier  
 
Sinon les contraintes d'intégrité, c'est un des principes des BDD relationnelles permettant de garder une base intègre.
Pour faire simple, ça t'évite les orphelins, ça assure une certaine cohérence des données et ça simplifie la maintenance de la base.
Dans ton cas, id_rubrique de la table site_fichier est une clé étrangère provenant de la table site_rubriques (dans laquelle id_rubrique est alors clé primaire). En mettant une contrainte de clé étrangère sur id_rubrique, tu empêches ainsi l'effacement accidentel des lignes dans site_rubrique dont l'id_rubrique est utilisé dans site_fichier, donc t'évites de faire des orphelins dans site_fichier.
Reste à voir si les contraintes existent sous mysql.
 
a pluche...




le in fonctionne, c'est le subselect qui ne sont pas supporte. (donc ta requete passera pas)
Sinon c'est clair que l'utilisation du handler innodb avec MySQL + une foreign key me parait pas mal :)


Message édité par joce le 12-09-2002 à 11:14:44

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

  [SQL] L'id du fichier n'existe pas dans la table rubrique

 

Sujets relatifs
[SQL] aide sur un SELECTposition courante dans un fichier
[Oracle]Problème de formatage de sortie vers un fichierRequête SQL : clause avec 2 valeurs, c'est possible ?
demander l'enregistrement d'un fichierACCESS : Comment ouvrir un fichier sans l'executer
[mySQL] ALTER TABLE mal foutu ou c moi ?...Excel: ouvrir dans une macro un fichier xl protege par mot de passe
[M$-SQL] Procedure, openfile, etc... chuis perdu...Création dynamique d'une table HTML (en JS)
Plus de sujets relatifs à : [SQL] L'id du fichier n'existe pas dans la table rubrique


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