Avatar billede banielsen Nybegynder
17. september 2004 - 11:29 Der er 11 kommentarer og
1 løsning

hvis nr er 0 skal navn sættes til at være tom

Jeg har følgende tre tabeller (lidt forkorte version af de originale)

forhandler: {nr, navn}
Kunde: {nr, navn}
Salg: {nr, dato, kunde_nr, forhandler_nr}

Ud af disse ønsker jeg så at trække: salg.nr, salg.dato, Kunde.navn, forhandler.navn. Men hvis salg.kunde_nr = 0, så skal kunde-navn bare sætte til at være tom (på samme måde med at hvis salg.forhandler_nr = 0 skal forhandler-nr sættes til at være tom. 
Kan den klares på en eller anden måde?
Avatar billede arne_v Ekspert
17. september 2004 - 11:36 #1
SELECT ...,IF(salg.kunde_nr=0,'',salg.kunde_navn),...
Avatar billede banielsen Nybegynder
17. september 2004 - 11:49 #2
hmm... jeg kan stadig ikke få det til at virke perfekt... jeg har måske heller ikke forklaret det helt ordenligt :$.. du kan lige få mine test-data og min SQL (som ikke virker efter hensigten):
Forhandler:
1, "søren"
2, "kaj"

Kunde:
1, "kurt"
2, "Jan"

Salg:
1, 1/1-2004, 1, 2
2, 1/1-2004, 0, 1
3, 1/1-2004, 1, 0

og min sql er:
SELECT Salg.Nr, Salg.Dato, Forhandler.Navn, Kunde.Navn
FROM Salg, Forhandler, Kunde
WHERE Forhandler.nr = Salg.Forhandler_nr AND Kunde.nr = Salg.Kunde_nr

Mit problem er (i mine øjne) at hvis salg.kunde_nr = 0, så er der ingen relation mellem Kunde.nr og Salg.Kunde_nr (og ligeledes med forhandler) og derfor vises salg to og tre ikke, så jeg skal vel have en måde hvorpå jeg kan sige (IF (Salg.Kunde_nr = 0, "", Kunde.Navn) "og ellers Kunde.nr = Salg.Kunde_nr"

Håber du kan følge mig
Avatar billede arne_v Ekspert
17. september 2004 - 19:58 #3
Er det så ikke bare en LEFT JOIN du skal have:

SELECT Salg.Nr, Salg.Dato, Forhandler.Navn, Kunde.Navn
FROM (Salg LEFT JOIN Forhandler ON Forhandler.nr = Salg.Forhandler_nr)
    LEFT JOIN Kunde ON Kunde.nr = Salg.Kunde_nr

?
Avatar billede banielsen Nybegynder
18. september 2004 - 16:30 #4
jeps.. det virker bare helt perfekt... jeg er ikke lige så skarp i JOIN-sætninger, så det må jeg lige kigge på :-). Men din sql virker perfekt :-)
smid et svar
Avatar billede arne_v Ekspert
18. september 2004 - 16:40 #5
svar
Avatar billede banielsen Nybegynder
19. september 2004 - 14:55 #6
jeg har lige et lille tillægsspørgsmål - håber det er ok:-)
Men hvad hvis jeg gerne vil søge på kunde_navn og / eller forhandler_navn?
Avatar billede arne_v Ekspert
19. september 2004 - 15:06 #7
Så ligger du vel bare en WHERE en eller to betingelse og AND eller OR ind ?
Avatar billede banielsen Nybegynder
19. september 2004 - 16:00 #8
Det ville jeg nemlig også umiddelbart sige, så jeg prøvede med følgende SQL:
SELECT Salg.Nr, Salg.Dato, Forhandler.Navn, Kunde.Navn
FROM (Salg LEFT JOIN Forhandler ON Forhandler.nr = Salg.Forhandler_nr)
    LEFT JOIN Kunde ON Kunde.nr = Salg.Kunde_nr
WHERE WHERE Kunde.Navn LIKE '%>soegeKundeNavn<%'AND Forhandler.Navn LIKE '%>soegeForhandlerNavn<%'
Men hvis f.eks. >soegeKundeNavner< er tomt, bliver de poster hvor Kunde.Navn er NULL ikke medtaget
Avatar billede arne_v Ekspert
19. september 2004 - 16:06 #9
SELECT Salg.Nr, Salg.Dato, Forhandler.Navn, Kunde.Navn
FROM (Salg LEFT JOIN Forhandler ON Forhandler.nr = Salg.Forhandler_nr)
    LEFT JOIN Kunde ON Kunde.nr = Salg.Kunde_nr
WHERE (Kunde.Navn IS NULL OR Kunde.Navn LIKE '%>soegeKundeNavn<%') AND
(Forhandler.Navn IS NULL OR Forhandler.Navn LIKE '%>soegeForhandlerNavn<%')
Avatar billede banielsen Nybegynder
19. september 2004 - 16:15 #10
Det virker - nogenlunde.
Nu sker der det at der står et soegeKundeNavn bliver posterne med dette Kunde-navn og alle poster hvor Kunde.navn = NULL medtaget (hvilket jo også er logisk nok npr man ser på SQL'en.
Kan det laves sådan at hvis kunde er tomt, kommer alle poster (incl. dem med NULL) og hvis der står et navn kommer dem med NULL ikke?
Avatar billede arne_v Ekspert
19. september 2004 - 17:11 #11
Mener du om soegeKundeNavn er tomt eller ej ?

Det skal vel ordnes i applikationen.
Avatar billede banielsen Nybegynder
19. september 2004 - 17:16 #12
ok, jeg havde bare håbet på at der var en eller anden smart måde at skrive det på i SQl.
Tak 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