Avatar billede pnr Nybegynder
12. april 2005 - 08:47 Der er 12 kommentarer og
1 løsning

Hjælp til at lave udtræk

Jeg har en dynamisk specifikationsliste for et produktkatalog. Det jeg skal for et bestemt produkt er at få en liste over alle specifikationerne der er oprettet og hvilke der er valgt til det specifikke produkt.

Jeg har følgende tabeller

produktSpec
-------------
id (pk)
specId (fk)
variable1
variable2


specifikationsData
------------------
specId (pk)
navn

I produktSpec oprettes posten kun hvis der er indtastet noget i variable 1.

Dvs. jeg skal have alle navnene fra specifikationsData, hvis der for den valgte post er oprettet en post i produktSpec skal værdien for variable 1 og variable 2 vises ud for posten.

eks.

specifikationsData.navn    produktSpec.variable1 ....
motor                                1800
hjulstr                                <null>
tophastighed                      160
omdrejninger                    <null>

hjulstr og omdrejninger er ikke oprettet i produktSpec
Avatar billede arne_v Ekspert
12. april 2005 - 09:24 #1
SELECT specifikationsData.navn,produktSpec.variable1
FROM specifikationsData LEFT JOIN produktSpec ON specifikationsData.secId=produktSpec.specId

måske
Avatar billede dbangx Nybegynder
12. april 2005 - 09:28 #2
prøv med følgende... ved ikke lige om syntaksen er korekt, men det er noget i den her stil du skal ha fat i:

SELECT  navn, variable1, variable2 FROM specifikationsData s, produktSpec p
WHERE s.specTd = p.specId

UNION

SELECT navn,null,null FROM specifikationsData
WHERE specId NOT IN ( SELECT SpecID FROM produktSpec )
Avatar billede pnr Nybegynder
12. april 2005 - 14:06 #3
dbangx: Det virker næsten som det skal men jeg skal haveudtrækket for et bestemt produkt jeg har derfor prøvet følgende:

SELECT  navn, variable1, variable2 FROM specifikationsData s, produktSpec p
WHERE s.specTd = p.specId AND id = 20

UNION

SELECT navn,null,null FROM specifikationsData
WHERE specId NOT IN ( SELECT SpecID FROM produktSpec )

Men det virker ikke efter hensigten.



Hvis der både er indtastet noget i variable1 og variable2 vises posten 2 gange
Avatar billede dbangx Nybegynder
12. april 2005 - 15:02 #4
såvidt jeg kan forstå er id et felt på ProduktSpec.
Hvis du vil lave forespørgsel på et felt der kun er der en del af tiden, så kan det da godt gå hen og give nogle problemer.

Jeg tror ikke jeg er helt med på hvor du vil hen?!?
Avatar billede pnr Nybegynder
12. april 2005 - 15:17 #5
Nej det kan nok godt være lidt svært at gennemskue når man ikke ser helheden. Jeg havde også prøvet at forenkle det lidt. Jeg prøver at uddybe det lidt mere.

Ud over de 2 tabeller jeg har nævnt har jeg også en treide tabel:

produkt
-------
prodId (pk)
navn

produktSpec
-------------
id (fk)(pk)
specId (fk)(pk)
variable1
variable2

   
specifikationsData
------------------
specId (pk)
navn


Jeg vil gerne have et udtræk som det jeg har vist ovenfor, Dette udtræk skal gælde et bestemt produkt 

Eks 1.

prodId = 20

specifikationsData.navn    produktSpec.variable1 ....
motor                                1800
hjulstr                                <null>
tophastighed                      160
omdrejninger                    <null>


Eks 2.

prodId = 19

specifikationsData.navn    produktSpec.variable1 ....
motor                                <null>
hjulstr                                17”
tophastighed                      <null>
omdrejninger                    8000
Avatar billede arne_v Ekspert
12. april 2005 - 21:10 #6
Der er ingen af de 2 andre tabeller som har prodId - hvordan skal de knyttes sammen ?
Avatar billede pnr Nybegynder
13. april 2005 - 06:54 #7
Ja det er vist lidt dårligt illustrert, det beklager jeg! Det skal se ud som følger

produkt
-------
prodId (pk)
navn

produktSpec
-------------
prodId (fk)(pk)
specId (fk)(pk)
variable1
variable2

   
specifikationsData
------------------
specId (pk)
navn
Avatar billede dbangx Nybegynder
13. april 2005 - 07:33 #8
Så går jeg ud fra at produktspec er obligatorisk for alle produkter og alle specifikationer.

SELECT navn,variable1,variable2 FROM produktSpec ps, specifikationsData s WHERE s.specID=ps.specId AND ps.prodId = 20
Avatar billede pnr Nybegynder
13. april 2005 - 08:58 #9
Jeg er glad for at i har kunnet følge min ide på trods af en dårlig formulering fra min side! Men det er ikke altid nemt at sætte ord på hvad det er man vil have :~)

Jeg er nu kommet fra til følgende SQL-sætning der virker som den skal (tror jeg nok)

SELECT    s.navn, ps.medtages, ps.medtagesIOversigt
FROM        underKatSpec ps INNER JOIN
                      specifikationsData s ON ps.specId = s.specId
WHERE    (ps.underkatId = 19)
UNION
SELECT    navn, NULL, NULL
FROM        specifikationsData
WHERE    specId NOT IN
                          (SELECT    s.specId
                            FROM          underKatSpec ps INNER JOIN
                                                  specifikationsData s ON ps.specId = s.specId
                            WHERE      (ps.underkatId = 19))


Men kan det evt. skrives pænere?
Avatar billede pnr Nybegynder
13. april 2005 - 14:56 #10
Ja jeg kan godt se med det SQL jeg har fået smidt her fatter i vel selt ikke noget af det :-/ Problemet er som jeg har udtrykt før er at det er taget ud af en større helhed, så jeg har omdøbt nogle af tabellerne til dette spørgsmål for at fremme forståelsen.

Så her skulle være noget SQL der passer til de tabeller jeg har vist:

SELECT    s.navn, ps.variable1, ps.variable2
FROM        produktSpec ps INNER JOIN
                      specifikationsData s ON ps.specId = s.specId
WHERE    (ps.produktId = 19)
UNION
SELECT    navn, NULL, NULL
FROM        specifikationsData
WHERE    specId NOT IN
                          (SELECT    s.specId
                            FROM          produktSpec ps INNER JOIN
                                                  specifikationsData s ON ps.specId = s.specId
                            WHERE      (ps.produktId = 19))

Men kan det gøres pænere?
Avatar billede pnr Nybegynder
19. april 2005 - 14:47 #11
Flere kommetar her?

dbangx smid et svar så er der point. Har du en kommentar til det sidste hør jeg også gerne den.
Avatar billede dbangx Nybegynder
19. april 2005 - 16:32 #12
Jeg kan ikke se at det sidste du postede kan gøres pænere eller anderledes. Det er en lang query, men det er der jo ikke noget galt i :-)
Avatar billede pnr Nybegynder
20. april 2005 - 05:43 #13
Så takker jeg mange gange for hjælpen!
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