Ajouter un commentaire

Niroken

Hello,

J'ai une bonne et une mauvaise nouvelle.

La mauvaise c'est que je suis scié comme toi, ca n'a pas marché non plus :)
La bonne c'est que j'ai essayé avec une syntaxe "in" au lieu de "not in" et ca a marché.

Je pense donc a un bug du driver JDBC, voire même qu'il n'implémente pas la syntaxe "not in". Ceci étant, ce n'est qu'une forte conviction de ma part sans preuves.

Bon sinon puisque "in" marche je me suis dit on va prendre le problème à l'envers.
On va donc récupérer tous les enregistrements qui sont dans LigneTelephone mais qui ne sont pas dans TelephoneCommunication.

Une telle requete peut se construire comme ca :

select 
  * 
from 
  LigneTelephone lt
LEFT JOIN 
  TelephoneCommunication tc  
ON 
  lt.Id=tc.LigneTelephoneId 
WHERE 
  tc.LigneTelephoneId ISNULL

Une telle requete va faire une jointure gauche des tables LigneTelephone et TelephoneCommunication, c'est a dire que tous les éléments commun par les ids aux deux tables seront mappés et ceux de LigneTelephone qui ne sont pas dans telephoneCommunication seront ajoutés a la fin...sans mapping donc leur LigneTelephoneId sera null, c'est ceux la qu on récupère.

L'ennui d'une telle requete c'est que la jointure est couteuse vu qu'il y a bcp d'enregistrements donc je te propose une requete plus optimisée (qui supprime les doublons avant de faire la jointure) :

select 
  * 
from 
  LigneTelephone lt
LEFT JOIN 
  (select distinct LigneTelephoneId from TelephoneCommunication) tc  
ON 
  lt.Id=tc.LigneTelephoneId 
WHERE 
  tc.LigneTelephoneId ISNULL

Du coup pour supprimmer tes enregistrements tu dois faire :

delete from LigneTelephone where Id in (
select 
  * 
from 
  LigneTelephone lt
LEFT JOIN 
  (select distinct LigneTelephoneId from TelephoneCommunication) tc  
ON 
  lt.Id=tc.LigneTelephoneId 
WHERE 
  tc.LigneTelephoneId ISNULL)

Si cette solution n'est pour toi pas acceptable et que d'aventure tu n'es pas contraint par le sgdb, tu peux peut etre voir du coté de hsql, c'est une solution similaire à sqllite et dois surement implémenter le "not in".

Bonne chance,
Niroken

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
  QQQ    RRRR   III   QQQ    L    
Q Q R R I Q Q L
Q Q RRRR I Q Q L
Q QQ R R I Q QQ L
QQQQ R RR III QQQQ LLLL
Q Q