21. juni 2015 - 10:35Der 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
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
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?
Synes godt om
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?
#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.
Synes godt om
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
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?
Det er ikke noget jeg har for vane... Havde prøvet det hele, virkede ikke! Derfor!!
Synes godt om
Ny brugerNybegynder
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.