Avatar billede macadisé Novice
21. juni 2015 - 10:35 Der er 12 kommentarer og
1 løsning

SQL NULL værdi ikke med?

Endnu et SQL spørgsmål...

SELECT title, books.book_id, price, first_name
FROM authors
JOIN book_author
ON authors.author_id = book_author.author_id
JOIN books
ON book_author.book_id = books.book_id

Nedenstående viser alle bogtitler, forfatternavne, priser, samt bog id'er, men jeg vil gerne kunne se de bøger, som ikke er linket til en forfatter.
Umiddelbart skulle NULL funktionen pr. automatik vise NULL værdier, men af en eller anden årsag er 'Jabberwock' med bog id 101 ikke repræsenteret i udskriften.

title                    book_id    price    first_name
Purple Secret            97            176,80    Ronnie
The Silent End            98            122,70    Philip
The Tower of the Dreamer 99            45,80    Jules
Heart hunter            100            98,30    Maybelle
The Wraith            102            128,00    Lasko
Avatar billede cht22 Professor
21. juni 2015 - 12:35 #1
Jeg kan ikke helt huske det men det er vidst inner join eller outer join du skal bruge.
Avatar billede macadisé Novice
21. juni 2015 - 15:35 #2
Yes, det virkede med en FULL JOIN :-)
21. juni 2015 - 21:30 #3
Med FULL JOIN vil du også få de forfattere i databasen der ikke har bøger i databasen.  Måske er det det du vil, og måske er der i databasen ingen forfattere uden bøger og kan heller ikke komme det.  Men hvis det du vil have er alle titler, books.id'er, priser, og forfatter hvis der er og ellers nul, så vil det være logisk at starte søgningen i tabellen bøger og så bruge LEFT JOIN, således:

SELECT title, books.book_id, price, first_name
FROM books
LEFT JOIN book_author
ON books.book_id = book_author.book_id
LEFT JOIN authors
ON book_author.author_id = authors.author_id
Avatar billede macadisé Novice
22. juni 2015 - 02:21 #4
Yes, det var nemlig titler uden en forfatter tilknyttet, jeg var ude efter ...

Og har med glæde fundet ud af det.

PS. kan dog bare ikke forstå at i dokumentaiton står at der pr. automatik fremkommer NULL værdier, der der ikke gør det, alt efter hvad jeg kan se!
22. juni 2015 - 06:49 #5
Med JOIN, som er lig med INNER JOIN, får du de resultater, hvor der er værdier i begge tabeller. Med

SELECT ....
FROM tabel1
JOIN tabel2
ON tabel1.id = tabel2.id

  beder du databasen kun at give dig de resultater, hvor der er en id i tabel2 der svarer til en id i tabel1.  Hvis i din SELECT en book ingen author har, udelukker du den fra resultatet med JOIN.  Og så er der ingen NULL værdier at vise for forfattere.

Hvis du i stedet ønsker alle data fra tabel1 plus data fra tabel2 hvor der er en match og ellers null, så skal du i stedet bruge LEFT JOIN.  Hvis du vil have alle resultater fra tabel2 plus macthes fra tabel1 skal du bruge RIGHT JOIN.  FULL JOIN svarer til LEFT JOIN plus RIGHT JOIN, altså i dit tilfælde alle bøger uden forfattere og alle forfattere uden bøger.  LEFT JOIN, RIGHT JOIN, og FULL JOIN kaldes også LEFT OUTER JOIN o.s.v.

Hvilken dokumentation har du der siger noget andet?
Avatar billede Slettet bruger
23. juni 2015 - 11:18 #6
JOIN = Inner JOIN - Inner join får du kun matchende items.

Du skal left join. og hvilken dokumentation omtaler du?
23. juni 2015 - 11:52 #7
#6, ....bortset fra, at LEFT JOIN vil give alle data fra den første tabel i en SELECT, i den foreliggende SELECT altså alle 'author, forfattere, uanset om de har bøger eller ej.  Det er det omvendte der ønskes, alle bøger uanset om de har forfattere eller ej.  Så enten skal SELECTen vendes om, hvad jeg foreslår, eller også skal der bruges RIGHT JOIN.
Avatar billede Slettet bruger
23. juni 2015 - 12:05 #8
Så right join- Funktionaliteten er den samme bare vent om. Læste ikke kravet viste bare hvad der skulle til
06. juli 2015 - 11:23 #9
macadise, kom du  fra det igen?  Jeg kan se, at du har oprettet flere nye spørgsmål; kan jeg bede dig afslutte dette eller komme ind og forklare din videre hensigt?
14. juli 2015 - 23:25 #10
Svar.
Avatar billede macadisé Novice
15. juli 2015 - 10:26 #11
Lukker tråden.
Avatar billede Slettet bruger
15. juli 2015 - 10:34 #12
Du lukker simpeltehen tråden og giver dig selv point?

Nu går jeg ikke op i point, men de svar der er kommet herinde burde nemt kunne løse dit problem ellers kunne du i det mindste skrive hvad du gjorde.

Det er ikke første gang du lukker dine egne spm.

Dårlig stil - Sidste gang jeg hjælper dig.
Avatar billede macadisé Novice
15. juli 2015 - 12:25 #13
Det er ikke noget jeg har for vane... Havde prøvet det hele, virkede ikke! Derfor!!
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