IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Difficulté pour transcrire une requete SQL


Sujet :

JPA Java

  1. #1
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut Difficulté pour transcrire une requete SQL
    Bonjour,

    J'aimerais faire la requête SQL suivante en JPA mais je rencontre quelques soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT FL.* FROM CO_FACTURE_DEBITEUR FL LEFT JOIN CO_FACTURE_DEBITEUR F ON F.CO_FACTURE_INTERNE_LIEE_ID = FL.ID
    WHERE FL.CO_TYPE_FACTURE_CI = 'DEBITEUR_INTERNE' AND F.ID IS NULL
    J'en suis ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT fl FROM FactureDebiteur fl LEFT JOIN fl. ??? WHERE fl.typeFactureCi = :typeFactureInt AND f.id IS NULL
    Mais sur la partie rouge, je ne vois pas comment faire l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT JOIN CO_FACTURE_DEBITEUR F ON F.CO_FACTURE_INTERNE_LIEE_ID=FL.ID
    Qqun peut-il m'aider svp ?

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ça dépend du mapping de l'entity mais en gros, ça ressemble à ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    public class CoFactureDebiteur
    {
       private Integer id;
       private ...
       private CoFactureDebiteur coFactureDebiteurLiee;
     
       @ManyToOne
       @JoinColumn("UID_FACTURE_LIEE")
       public CoFactureDebiteur getCoFactureDebiteurLiee()
       {
          this.coFactureDebiteurLiee;
       }
       ...
    }
     
    entityManager.createQuery("select a from CoFactureDebiteur a where a.coTypeFactureCi = 'DEBITEUR_INTERNE' and a.coFactureLiee.id is null");
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Salut,

    Voici le mappage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    @Table(name = "dbo.CO_FACTURE_DEBITEUR")
    public class FactureDebiteur
     
     ....
     
    @JoinColumn(name = "CO_FACTURE_INTERNE_LIEE_ID")
    private FactureDebiteur factureInterneLiee;
    Ceci ne fonctionne pas :
    entityManager.createQuery("select a from CoFactureDebiteur a where a.coTypeFactureCi = 'DEBITEUR_INTERNE' and a.coFactureLiee.id is null");
    Il faudrait pouvoir le faire à l'envers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a.coFactureLiee.id is null
    "a" correspondrait à la facture liée et "b" à la facture parente et c'est "a.id" qui devrait être null

    Je ne sais pas si tu vois ce que je veux dire ?

    Merci pour ton aide

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Et ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select fl
    from CoFactureDebiteur fl left join  fl.factureInterneLiee f where fl.coTypeFactureCi = 'DEBITEUR_INTERNE' and f.id is null;

  5. #5
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Non ça ne marche pas. C'est toujours le même soucis, il faudrait pouvoir inverser le test.

    J'ai essayé ceci mais toujours en vain car je n'ai aucun enregistrement trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT fl FROM FactureDebiteur fl LEFT JOIN f.factureInterneLiee fl WHERE fl.typeFactureCi = :typeFactureInt AND f.id IS NULL
    La requête SQL étant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT FL.* FROM CO_FACTURE_DEBITEUR FL LEFT JOIN CO_FACTURE_DEBITEUR F ON F.CO_FACTURE_INTERNE_LIEE_ID = FL.ID
    WHERE FL.CO_TYPE_FACTURE_CI = 'DEBITEUR_INTERNE' AND F.ID IS NULL
    Merci les gars pour votre aide

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Peux-tu poster le code de l'entity en entier svp ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    @Entity
    @Table(name = "dbo.CO_FACTURE_DEBITEUR")
    public class FactureDebiteur extends BusinessEntite implements IFacture {
     
    	@ManyToOne(fetch = FetchType.EAGER)
    	@JoinColumn(name = "INT_IDENTITE_ID")
    	private Identite identite;
     
    	@ManyToOne(fetch = FetchType.EAGER)
    	@JoinColumn(name = "INT_IDENTITE_CREANCIER_ID")
    	private Identite identiteCreancier;
     
    	@ManyToOne(fetch = FetchType.EAGER)
    	@JoinColumn(name = "MD_MANDAT_ID", nullable = false)
    	private Mandat mandat;
     
    	@OneToOne(fetch = FetchType.LAZY)
    	@JoinColumn(name = "CO_FACTURE_INTERNE_LIEE_ID")
    	private FactureDebiteur factureInterneLiee;
     
    	@ManyToOne(fetch = FetchType.LAZY)
    	@JoinColumn(name = "GL_SOCIETE_ID", nullable = false)
    	private Societe societe;
     
    	@ManyToOne(fetch = FetchType.LAZY)
    	@JoinColumn(name = "GL_SOCIETE_CLIENTE_ID")
    	private Societe societeCliente;
     
    	@ManyToOne(fetch = FetchType.LAZY)
    	@JoinColumn(name = "GL_SOCIETE_FACTURE_INTERNE_ID")
    	private Societe societeFactureInterne;
     
    	@Temporal(TemporalType.DATE)
    	@Column(name = "DATE", nullable = false)
    	private Date date;
     
    	@Temporal(TemporalType.DATE)
    	@Column(name = "DATE_RAPPEL")
    	private Date dateRappel;
     
    	@Temporal(TemporalType.DATE)
    	@Column(name = "DATE_DERNIER_RAPPEL")
    	private Date dateDernierRappel;
     
    	@Column(name = "NIVEAU_RAPPEL")
    	private int niveauRappel;
     
    	@Column(name = "DECOMPTE_ANNEE")
    	private Integer decompteAnnee;
     
    	@Column(name = "DECOMPTE_TRIMESTRE")
    	private Integer decompteTrimestre;
     
    	@ManyToOne(fetch = FetchType.EAGER)
    	@JoinColumn(name = "CO_TRIMESTRE_ID")
    	private Trimestre trimestre;
     
    	@Column(name = "NO_FACTURE", length = 20, unique = true, nullable = false)
    	private String noFacture;
     
    	@Column(name = "NO_BV", length = 20)
    	private String noBv;
     
    	@Enumerated(EnumType.STRING)
    	@Column(name = "CO_TYPE_VALEUR_FACTURE_CI", length = 30, nullable = false)
    	private TypeValeurFactureCi typeValeurFactureCi;
     
    	@Enumerated(EnumType.STRING)
    	@Column(name = "CO_STATUT_PAIEMENT_CI", length = 30, nullable = false)
    	private StatutPaiementCi statutPaiementCi;
     
    	@Column(name = "MONTANT_HONORAIRES", nullable = false)
    	private double montantHonoraires;
     
    	@Column(name = "MONTANT_FRAIS_DEPL", nullable = false)
    	private double montantFraisDepl;
     
    	@Column(name = "MONTANT_FRAIS_MANDAT", nullable = false)
    	private double montantFraisMandat;
     
    	@Column(name = "MONTANT_HT", nullable = false)
    	private double montantHt;
     
    	@Column(name = "MONTANT_TVA", nullable = false)
    	private double montantTva;
     
    	@Column(name = "MONTANT_TTC", nullable = false)
    	private double montantTtc;
     
    	@Column(name = "TAUX_TVA", nullable = false)
    	private double tauxTva;
     
    	@Column(name = "SOLDE_A_PAYER", nullable = false)
    	private double soldeAPayer;
     
    	@Column(name = "NO_COMPTE_HONORAIRES", length = 10, nullable = false)
    	private String noCompteHonoraires;
     
    	@Column(name = "NO_COMPTE_FRAIS_DEPLACEMENTS", length = 10, nullable = false)
    	private String noCompteFraisDeplacements;
     
    	@Column(name = "NO_COMPTE_FRAIS_DOSSIER", length = 10, nullable = false)
    	private String noCompteFraisDossier;
     
    	@Column(name = "NO_COMPTE_DEBIT", length = 10, nullable = false)
    	private String noCompteDebit;
     
    	@Column(name = "NO_COMPTE_TVA", length = 10, nullable = false)
    	private String noCompteTva;
     
    	@Column(name = "NO_COMPTE_ESCOMPTE", length = 10, nullable = false)
    	private String noCompteEscompte;
     
    	@Column(name = "EST_COMPTABILISE", nullable = false)
    	private boolean comptabilise;
     
    	@Column(name = "EST_REGLEE", nullable = false)
    	private boolean reglee;
     
    	@Column(name = "EST_AVEC_FACTURE_INTERNE", nullable = false)
    	private boolean avecFactureInterne;
     
    	@Enumerated(EnumType.STRING)
    	@Column(name = "CO_CATEGORIE_USIC_CI", length = 30)
    	private CategorieUsicCi categorieUsicCi;
     
    	@Enumerated(EnumType.STRING)
    	@Column(name = "CO_TYPE_FACTURE_CI", length = 30, nullable = false)
    	private TypeFactureCi typeFactureCi;
     
    	@OneToMany(mappedBy = "factureDebiteur", orphanRemoval=true, fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
        private List<Reglement> reglementList;
     
    	@OneToMany(mappedBy = "factureDebiteur", orphanRemoval=true, fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
        private List<EcritureCompta> ecritureComptaList;
     
    	@Column(name = "EST_ACCESS", nullable = false)
    	private boolean access;
     
    	@Column(name = "EST_REGLEE_SANS_REGLEMENT", nullable = false)
    	private boolean regleeSansReglement;
     
    	@Transient
    	private double soldeOuvertForListe;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @MappedSuperclass
    @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
    public class BusinessEntite {
     
    	@Id
    	@Column(name = "ID", nullable = false)
    	@GeneratedValue(strategy = GenerationType.IDENTITY)
    	private int id;
     
    	@Column(name = "VERSION", nullable = false)
    	@Version
    	private int version;
    Merci

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Citation Envoyé par doons Voir le message
    c'est "a.id" qui devrait être null
    Citation Envoyé par doons Voir le message
    [CODE]@Id
    @Column(name = "ID", nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id; // id ne serait jamais null
    C'est contradictoire. Normale que ça ne retourne rien.

    A+.

  9. #9
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Bonjour,
    Il devrait être null dans le sens ou il ne doit pas y avoir de correspondance.
    La requête SQL suivante fonctionne très bien, en testant que l'id soit null :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT FL.* FROM CO_FACTURE_DEBITEUR FL LEFT JOIN CO_FACTURE_DEBITEUR F ON F.CO_FACTURE_INTERNE_LIEE_ID = FL.ID
    WHERE FL.CO_TYPE_FACTURE_CI = 'DEBITEUR_INTERNE' AND F.ID IS NULL

  10. #10
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par doons Voir le message
    J'ai essayé ceci mais toujours en vain car je n'ai aucun enregistrement trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT fl FROM FactureDebiteur fl LEFT JOIN f.factureInterneLiee fl WHERE fl.typeFactureCi = :typeFactureInt AND f.id IS NULL
    Tu devrais avoir une exception avec ce code puisque tes alias ne sont pas bon.
    Ça doit être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT fl FROM FactureDebiteur fl LEFT JOIN fl.factureInterneLiee f WHERE fl.typeFactureCi = :typeFactureInt AND f.id IS NULL
    A+.

  11. #11
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    En faisant ceci :
    Tu devrais avoir une exception avec ce code puisque tes alias ne sont pas bon.
    Ça doit être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part

    SELECT fl FROM FactureDebiteur fl LEFT JOIN fl.factureInterneLiee f WHERE fl.typeFactureCi = :typeFactureInt AND f.id IS NULL

    A+.
    C'est comme si je faisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT fl FROM FactureDebiteur fl WHERE fl.typeFactureCi = :typeFactureInt
    Ca me retourne toutes les entrées pour lesquelles typeFactureCi = :typeFactureInt

    En image ça sera peut-être plus simple
    Nom : DEBI.png
Affichages : 141
Taille : 18,8 Ko

    Je veux récupérer les factures de type "DEBITEUR_INTERNE" et en plus :
    En rouge il y a la facture ID = 16392
    On voit que l'ID 16392 ne se trouve pas dans la colonne CO_FACTURE_INTERNE_LIEE => Je veux cette facture
    Par contre, la facture ID = 16391 se trouve dans la colonne CO_FACTURE_INTERNE_LIEE => Je ne veux pas cette facture

  12. #12
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Ça confirme ce que je disait:
    Citation Envoyé par andry.aime Voir le message
    C'est contradictoire. Normale que ça ne retourne rien.
    id ne peut être null (en me basant sur l'image), et ça ne retournera rien. C'est CO_FACTURE_INTERNE_LIEE_ID qui peut être null.

    A+.

  13. #13
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    J'ai bien compris, mais ça veut dire qu'avec JPA, je ne peux faire l'équivalent de cette requête SQL ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT FL.* FROM CO_FACTURE_DEBITEUR FL LEFT JOIN CO_FACTURE_DEBITEUR F ON F.CO_FACTURE_INTERNE_LIEE_ID = FL.ID
    WHERE FL.CO_TYPE_FACTURE_CI = 'DEBITEUR_INTERNE' AND F.ID IS NULL

  14. #14
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Donc tu veux les factures de type "DEBITEUR_INTERNE" qui ne sont pas encore référencées, c'est bien ça ?
    Si oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select a from CO_FACTURE_DEBITEUR a where a.id not in (select CO_FACTURE_INTERNE_LIEE_ID from CO_FACTURE_DEBITEUR where CO_FACTURE_INTERNE_LIEE_ID is not null)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Même ton avec sql, ça ne retourne aucun résultat puisque la colonne id ne sera jamais null.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT fl FROM FactureDebiteur fl LEFT JOIN fl.factureInterneLiee f WHERE fl.typeFactureCi = :typeFactureInt AND f.factureInterneLiee IS NULL
    A+.

  16. #16
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    La requête native est juste à la base puisqu'il a un "left join". Du coup, comme il n'y a pas de correspondance pour la jointure, les colonnes sont initialisées à null.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    La requête native est juste à la base puisqu'il a un "left join". Du coup, comme il n'y a pas de correspondance pour la jointure, les colonnes sont initialisées à null.
    Effectivement, j'ai loupé le "left".
    @doons
    Mais avec les données que tu nous montres et les données qui seront insérées avec ton application, "id is null" retournera toujours un false.

    A+.

  18. #18
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Donc tu veux les factures de type "DEBITEUR_INTERNE" qui ne sont pas encore référencées, c'est bien ça ?
    Si oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select a from CO_FACTURE_DEBITEUR a where a.id not in (select CO_FACTURE_INTERNE_LIEE_ID from CO_FACTURE_DEBITEUR where CO_FACTURE_INTERNE_LIEE_ID is not null)
    Cette requête devrait fonctionner (sans jointure)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    ça y'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT a FROM FactureDebiteur a WHERE a.typeFactureCi = :typeFactureInt AND a NOT IN (SELECT b.factureInterneLiee FROM FactureDebiteur b WHERE b.factureInterneLiee IS NOT NULL)
    Je ne sais pas pourquoi je suis aller m'embourber avec des LEFT JOIN & Co

    Merci beaucoup pour votre aide

  20. #20
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je chipote, mais attention à l'utilisation de "not in" en fonction du nombres d'éléments retournés.
    C'est bien pour peu d'éléments mais pas terrible niveau performances si beaucoup d'éléments.
    Tu peux utiliser "not exists" à la place.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. demande d'aide pour comprendre une requete SQL
    Par Halloula dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/04/2008, 18h14
  2. aide pour formuler une requete sql
    Par viny dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 01/03/2008, 12h20
  3. aide pour créer une requete sql
    Par DonKnacki dans le forum Langage SQL
    Réponses: 11
    Dernier message: 07/02/2008, 18h17
  4. Difficulté pour réaliser une requete peu complexe :/
    Par DanaX dans le forum Langage SQL
    Réponses: 9
    Dernier message: 16/05/2007, 13h55
  5. En difficulté pour faire une requete
    Par Fonzy17 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/03/2005, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo