Comment retourner uniquement les lignes qui sont plus d'une fois intérieure join'd

voix
0

J'ai deux tables, une pour les factures et un pour les paiements entrants. Un paiement entrant peut être jointe à une facture par une clé étrangère comme ceci:

from invoices t1 inner join incoming_payments t2 on t1.receiptnum = t2.docnum

La question: Je veux retourner toutes les factures qui ont plus d'un paiement affiché contre eux. Pour chaque facture, je veux retourner son docnum, qui est juste un identifiant unique pour la facture.

Voici quelques choses que j'essayé qui ne fonctionne pas:

select t0.docnum
from invoices t0 inner join incoming_payments t1 on t0.receiptnum = t1.docentry 
group by t0.docnum
having count(t0.docnum) > 1  

et

select t0.docnum
from invoices t0 inner join incoming_payments t1 on t0.receiptnum = t1.docentry
group by t0.receiptnum, t0.docnum
having count(t0.receiptnum) > 1

Des idées?

Créé 27/08/2009 à 05:01
source utilisateur
Dans d'autres langues...                            


5 réponses

voix
1

Je ne sais pas pourquoi le premier ne fonctionne pas ... Il faut vraiment ai. Pouvez-vous nous « ça n'a pas marché »?

Essayer:

select t0.docnum, *
from invoices t0 
  inner join incoming_payments t1 on t0.receiptnum = t1.docentry 

Et

select t0.docnum, count(*)
from invoices t0 
  inner join incoming_payments t1 on t0.receiptnum = t1.docentry 
group by t0.docnum

pour vous aider à comprendre ce qui se passe.

Rob

Créé 27/08/2009 à 05:04
source utilisateur

voix
1
sélectionnez t0.docnum, count (*)
des factures t0 t1 jointure interne incoming_payments sur t0.receiptnum = t1.docentry 
par groupe t0.docnum
comptage ayant (*)> 1

Créé 27/08/2009 à 05:06
source utilisateur

voix
1

Quelle est l'erreur SQL que vous obtenez? Avez-vous un groupe par tous les domaines qui devaient être regroupées?

Créé 27/08/2009 à 05:13
source utilisateur

voix
0

Je pense que votre exemple SQL est incompatible (par rapport au 1er SQL que vous avez fourni).
à- dire en 1ère SQL que vous utilisez docnum pour la comparaison et dans SQL ultérieure, vous utilisez docentry.

select t0.docnum, count(t1.*)
from invoices t0 inner join incoming_payments t1 on t0.receiptnum = t1.docentry
group by t0.docnum
having count(t1.*) > 1

EDIT: Quel est le champ correspondant pour la comparaison?
t0.receiptnum = t1.docnumOU t0.receiptnum = t1.docentry?

EDIT2: Voir ci-dessus SQL modifiée.

Créé 27/08/2009 à 05:16
source utilisateur

voix
0

La réponse a fini par être beaucoup plus complexe étant donné le schéma que je travaillais avec. Je ne suis pas compris le code réel ici, mais je résolu le problème il y a un certain temps. Je voulais juste suivre et remercier tout le monde pour aider.

Créé 17/09/2010 à 21:48
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more