Avatar billede websam Nybegynder
08. december 2006 - 07:19 Der er 11 kommentarer og
1 løsning

Problemer med at få en join til at virke ?

Hejsa,

Jeg sidder og roder med en sql forspørgelse som jeg ikke kan få til at virke.

Jeg har 2 tabeller en ordrehoved og en ordrelinier. Det jeg skal er følgende :

1. Finde ud af om en kunde har mere end en ordre.
2. Hvis kunden har mere end en ordre skal der tjekkes om et varenummer går igen på 2 eller flere ordre.

Da kunde id ikke ligger i ordrelinier skal sql'en laves med en join og det kan jeg ikke helt hitte rede i.

Håber der er en der kan hjælpe mig igennem dette ;o)

/Websam
Avatar billede kalp Novice
08. december 2006 - 09:16 #1
kan du lige give os en oversigt over de 2 tabeller..
Avatar billede websam Nybegynder
08. december 2006 - 10:55 #2
Der er mange felter men dem kan du da godt få her :

Tabel "ordrehoved" :
id,  ordrenummer,  søgenavn,  oprettet,  leveres,  deresref,  vorref,  navn,  adresse,  adresse2,  postby,  land,  email,  telefon,  rekvnummer,  levnavn,  levadresse,  levadresse2,  levpostby,  levland,  notat,  debitorkonto,  fakturakonto,  bekræftet,  debitorgruppe,  sælger,  sprog,  fakturadato,  fakturanummer,  betalingsmåde,  eannummer,  trackntraceid,  betalingsid,  pbsnummer,  valuta,  godkendt,  spærret,  lagerstatus,  momskode,  momsnummer,  priser,  beholdning,  fakturabeløb,  klarfak,  leveringsmåde,  placering,  status,  PFSforholdsordre,  PFSprodukt,  PFStoldindhold,  PFSlandekode,  PFStillæg,  orderrefer,  ipnummer

ordlinier :
varenummer,  ordrenummer,  antal,  salgspris,  rabat,  beløb,  tekst,  levernu,  leveret,  levering,  oprettet,  bekræftet,  tempbekræftet,  faktureret,  liniestatus,  lagerstatus,  antalfysisk,  serienummer,  momskode,  id,  c5_recid

Jeg har lavet flere forsøg og det der kom tættes på er noget der ligne dette :

Select count(distinct(ordlinier.varenummer)), ordrehoved.debitorkonto from ordlinier left join ordrehoved on ordlinier.ordrenummer = ordrehoved.ordrenummer group by ordrehoved.debitorkonto having (count(ordlinier.varenummer) > 1)

Så er der lidt at kigge på ;o)
Avatar billede kalp Novice
10. december 2006 - 15:49 #3
Er debitorkonto under ordrehoved det samme som ordrenummer ?

altså tænker på værdien i dem.. dvs. er det dem jeg skal joine for at finde frem til hvilke ordrelinjer en kunde har?
Avatar billede websam Nybegynder
10. december 2006 - 18:47 #4
nej ordrehoved.ordrenummer = ordlinier.ordrenummer debitorkonto er brugerens id/konto nummer.

/Websam
Avatar billede kalp Novice
12. december 2006 - 23:37 #5
prøv denne.. ved ikke helt om det vil fungere.. tjek om ikke andet lige syntax igennem;) det er lidt svært selv at se når jeg bare skriver her på E..
men ellers noget som det jeg skriver her... hvis det er valid SQL=)

SELECT ordlinier.ordrenummer as ordl,ordrehoved.ordrenummer as ordh, ordlinier.varenummer as ordvar  FROM ordrehoved, ordlinier WHERE ordl = ordh AND ordl IN (SELECT COUNT(odrenummer) as antal FROM ordlinier as ol WHERE ol.ordrenummer = ordl AND antal > 0) AND ordvar IN (SELECT COUNT(ordlinier.varenummer) as am FROM ordlinier as olg WHERE olg.varenummer = ordvar AND am > 1)
Avatar billede kalp Novice
12. december 2006 - 23:38 #6
Du skal selvfølgelig i den første select selv smide flere kolonner ind hvis den virker..
Avatar billede websam Nybegynder
13. december 2006 - 07:39 #7
Jeg har lige forsøgt mig lidt frem og tilbage og har ændret lidt på den :

SELECT ordlinier.ordrenummer, ordrehoved.ordrenummer, ordlinier.varenummer
FROM ordrehoved, ordlinier
WHERE ordlinier.ordrenummer = ordrehoved.ordrenummer
AND ordlinier.ordrenummer
IN (
    SELECT COUNT(ordrenummer) AS n
    FROM ordlinier ol
    WHERE ol.ordrenummer = ordlinier.ordrenummer
    AND n > 0)

AND ordlinier.varenummer
IN (
    SELECT COUNT( ordlinier.varenummer ) AS m
    FROM ordlinier olg
    WHERE olg.varenummer = ordlinier.varenummer
    AND m > 1
)

Men med denne får jeg fejl på henholdsvis 'n' og 'm' :

Unknown column 'n' in 'where clause'
Unknown column 'm' in 'where clause'

Hvad kan dette skyldes ?

/Websam
Avatar billede kalp Novice
13. december 2006 - 09:23 #8
prøv at skriv det sådan her?

IN (
    SELECT COUNT(ol.ordrenummer) AS n
    FROM ordlinier ol
    WHERE ol.ordrenummer = ordlinier.ordrenummer
    AND n > 0)

AND ordlinier.varenummer
IN (
    SELECT COUNT( olg.varenummer ) AS m
    FROM ordlinier olg
    WHERE olg.varenummer = ordlinier.varenummer
    AND m > 1
)
Avatar billede websam Nybegynder
13. december 2006 - 13:49 #9
det giver samme fejl som det andet :

Unknown column 'n' in 'where clause'
Avatar billede kalp Novice
13. december 2006 - 20:41 #10
Du kan lige prøve uden navngivning så... f.eks


AND ordlinier.varenummer
IN (
    SELECT COUNT( olg.varenummer )
    FROM ordlinier olg
    WHERE olg.varenummer = ordlinier.varenummer
    AND olg.varenummer  > 1
)
Avatar billede websam Nybegynder
17. juni 2007 - 08:54 #11
Smid et svar kalp ;o)
Avatar billede kalp Novice
17. juni 2007 - 11:17 #12
:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester