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
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 :
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) :
Du coup pour supprimmer tes enregistrements tu dois faire :
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