Avatar billede saudoo Nybegynder
23. april 2011 - 21:45 Der er 5 kommentarer og
1 løsning

Data fra to tabeller placeret i forskellige kolonner

Hej eksperten,

Jeg prøver at trække ordrer ud af min database, som er fordelt på min. to tabeller.

De ser ud som følger:

[tblOrdrer] -
tblOrdrer.fldId
tblOrdrer.fldDatoBestilt
tblOrdrer.fldDatoLevering

... og

[tblOrdreAdresse] -
tblOrdreAdresse.fldOrdreId
tblOrdreAdresse.fldVirksomhed
tblOrdreAdresse.fldNavn
tblOrdreAdresse.fldAdresse
tblOrdreAdresse.fldPostNr
tblOrdreAdresse.fldTlf
tblOrdreAdresse.fldEmail
tblOrdreAdresse.fldType

tblOrdreAdresse.fldType er af datatypen integer (ændrer det til bit senere) og bliver enten tildelt værdien 1 eller 2. Det er alt efter hvilken type adressen er og der vil kun være en af hver slags i databasen til hver ordre. Dette er på grund af, at man kan vælge både at oplyse en faktureringsadresse og en modtageradresse.


Tabellen tblOrdreAdresse indeholder adresserne tilknyttet til de ordre jeg har gemt i tblOrdrer. Selve varerne som er købt, er ikke nødvendig i dette tilfælde og er gemt i en tredje tabel.


Godt.. Det jeg prøver, er at trække indholdet ud fra tblOrdrer og tblOrdrerAdresser som begge har samme ordre-id. Jeg har forsøgt mig, hvor jeg har nøjes med leveringsdatoen(tblOrdrer.fldDatoLevering) og navnet(tblOrdreAdresse.fldNavn). Problemet er bare, at hvis jeg gør som nedenfor, får jeg naturligvis to rækker skrevet ud. En række for tblOrdreAdresse.fldType=1 og en for tblOrdreAdresse.fldType=2:

SELECT tblOrdrer.fldId, tblOrdrer.fldDatoLevering, tblOrdreAdresse.fldNavn AS fldFakNavn
FROM tblOrdrer, tblOrdreAdresse
WHERE tblOrdrer.fldId = 166 AND tblOrdrer.fldId = tblOrdreAdresse.fldOrdreId


Hvad jeg essentielt gerne vil ende ud med er følgende:

[tabel] -
tabel.fldId
tabel.fldDatoLevering
tabel.fldFakNavn
tabel.fldFak... alle andre adressefelter i adresse-tabellen med fldType=1
tabel.fldModNavn
tabel.fldMod... alle andre adressefelter i adresse-tabellen med fldType=2
Avatar billede martinbk Nybegynder
24. april 2011 - 01:10 #1
SELECT tblOrdrer.fldId, tblOrdrer.fldDatoLevering, tblOrdreAdresse.fldNavn AS fldFakNavn FROM tblOrdrer JOIN tblOrdreAddresse ON tblOrdrer.fldId = tblOrdreAdresse.fldOrdreId WHERE tblOrdrer.fldId = 166;

noget i den still du vil ?
Avatar billede saudoo Nybegynder
24. april 2011 - 01:26 #2
Ikke helt. Det er ca. samme slutresultat, som det jeg er kommet frem til, genererer.

Hvis jeg nu har to adresser tilknyttet til en ordre, den ene med fldType sat til 1 og den anden med fldType sat til 2, så kommer de frem som to rækker.

Jeg kan lige prøve at illustrere det grafisk:

Jeg har følgende nu:

------------------------------------------------------------------
| fldId | fldDatoLevering                | fldFakNavn    |
|-----------------------------------------------------------------
| 166  | 2011-24-04 00:00:00.000 | Mit Fornavn 1 |  <- Række hvor fldType=1
| 166  | 2011-24-04 00:00:00.000 | Mit Fornavn 2 |  <- Række hvor fldType=2
------------------------------------------------------------------

Hvad jeg reelt gerne vil have:

-------------------------------------------------------------------------------------
| fldId | fldDatoLevering                | fldFakNavn    | fldModNavn    |
|------------------------------------------------------------------------------------
| 166  | 2011-24-04 00:00:00.000 | Mit Fornavn 1 | Mit Fornavn 2 |
-------------------------------------------------------------------------------------
Avatar billede ulrikm Nybegynder
24. april 2011 - 08:46 #3
Du kan evt lave en subselect:

select top 1 * from
(
  SELECT tblOrdrer.fldId, tblOrdrer.fldDatoLevering, tblOrdreAdresse.fldNavn AS fldFakNavn
  FROM tblOrdrer, tblOrdreAdresse
  WHERE tblOrdrer.fldId = 166 AND tblOrdrer.fldId = tblOrdreAdresse.fldOrdreId
) as t
24. april 2011 - 08:54 #4
tblAdresse skal joines to gange, en gang hvor type = 1 og en gang hvor type = 2.  Proev denne:

SELECT o.fldId, o.fldDatoLevering, a1.fldNavn fldFakNavn, a2.fldNavn fldModNavn
FROM tblOrdrer o
LEFT JOIN (SELECT * FROM tblAdresse WHERE fldType = 1) a1 ON o.fldId = a1.fldOrdreId
LEFT JOIN (SELECT * FROM tblAdresse WHERE fldType = 2) a2 ON o.fldId = a2.fldOrdreId
WHERE o.fldId = 166
Avatar billede ulrikm Nybegynder
24. april 2011 - 09:10 #5
glem subselecten - jeg så ikke, at du gerne ville have data fra både modtager- og faktureringsadresse..
Avatar billede saudoo Nybegynder
24. april 2011 - 10:00 #6
Smukt. Tak for hjælpen Christian_Belgien. Det giver selvfølgelig fantastisk god mening, når jeg nu ser svaret foran mig. Jeg tror jeg skal i gang med at nærstudere joins. :)
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