Jak vrátit pouze řádky, které jsou vnitřním join'd více než jednou

hlasů
0

Mám dva stoly, jeden pro faktury a jeden pro příchozí platby. Příchozí platby mohou být přidány do faktury cizí klíč jako tak:

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

Otázka: Chci se vrátit všechny faktury, které mají více než jednu platbu vyslán proti nim. U každé faktury chci vrátit jeho docnum, což je jen o jedinečný identifikátor pro faktury.

Zde jsou některé věci, které jsem se snažil, který nepracoval:

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  

a

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

Nějaké nápady?

Položena 27/08/2009 v 05:01
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
1

Co se SQL chyba dostanete? Věděli jste skupina podle všech oblastech, které byly, které musí být uspořádány do skupin?

Odpovězeno 27/08/2009 v 05:13
zdroj uživatelem

hlasů
1
vyberte t0.docnum, počítat (*)
z faktur T0 vnitřní spojení incoming_payments t1 na t0.receiptnum = t1.docentry 
skupina podle t0.docnum
které mají počet (*)> 1

Odpovězeno 27/08/2009 v 05:06
zdroj uživatelem

hlasů
1

Nejsem si jistý, proč první nefungovala ... Je to opravdu měla jsem. Můžete rozšířit o „nefungovalo to“?

Snaž se:

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

A

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

který vám pomůže zjistit, co se děje.

Okrást

Odpovězeno 27/08/2009 v 05:04
zdroj uživatelem

hlasů
0

Odpověď skončil být mnohem složitější, vzhledem k schéma jsem pracoval s. Nejsem včetně skutečný kód zde, ale jsem vyřešil problém, před chvílí. Jen jsem chtěl sledovat a poděkoval všem za pomoc.

Odpovězeno 17/09/2010 v 21:48
zdroj uživatelem

hlasů
0

Myslím, že váš příklad SQL je v rozporu (ve srovnání s 1. SQL, kterou jste zadali).
tedy v 1. SQL používáte docnum pro srovnání i v následném SQL, který používáte 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: Jaká je odpovídající pole pro srovnání?
t0.receiptnum = t1.docnumOR t0.receiptnum = t1.docentry?

EDIT2: Viz upravený SQL výše.

Odpovězeno 27/08/2009 v 05:16
zdroj uživatelem

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