Hét vraag- en antwoordplatform van Nederland

Hoe voer ik deze code uit in sql?

Ik moet het volgende doen in sql:
"Bereken voor alle liedjes van Guus Meeuwis (zonder zijn band Vagant) die zowel in de TOP2000 van 2007 als die van 2008 staan hoeveel plaatsen ze zijn gezakt in 2008 ten opzichte van 2007. Het resultaat moet bestaan uit een lijst van nummers met daarnaast een veld met de naam 'gezakt' waarin staat hoeveel posities dat liedje is gezakt."

Ik kom zelf niet verder dan dit:

SELECT position-position
FROM liedjes, notering
WHERE artist = "Guus Meeuwis" AND notering.year = "2007" OR "2008";

Ik heb twee tabellen. Een heet "liedjes". Tabel liedjes bestaat uit de volgende onderdelen: id, year, title, artist. Waarbij year verwijst naar het jaar van uitgave. De tweede tabel heet "notering". Deze tabel bestaat uit de volgende onderdelen: id, year, position. Waarbij year verwijst naar het jaar dat hij in de top2000 stond.

Het zou erg fijn zijn als iemand mij kan helpen. Bedankt!

Toegevoegd na 30 seconden:
Ik bedoel: Hoe voer ik deze opdracht uit in sql? Niet code.

Verwijderde gebruiker
10 jaar geleden
798

Heb je meer informatie nodig om de vraag te beantwoorden? Reageer dan hier.

Het beste antwoord

Ik zit te denken aan een inner join op zichzelf voor de noteringen tabel:

SELECT title, N8.position-N7.position FROM liedjes, notering N7 INNER JOIN notering N8 ON N7.id=N8.id WHERE liedjes.artist='Guus Meeuwis' AND liedjes.id=N7.id AND N7.year=2007 AND N8.year=2008

N7 en N8 zijn aliassen voor de tabel 'noteringen' met de records uit 2007 en 2008 respectievelijk.
(Lees meer...)
Verwijderde gebruiker
10 jaar geleden
Verwijderde gebruiker
10 jaar geleden
Bedankt voor het antwoorden. Ik heb deze code ingevoerd alleen werkt deze helaas niet. Ik denk dat het komt omdat ik niet goed weet wat ik moet invullen voor N7 en N8. Zou u mij dezelfde code nog een keer kunnen vertellen maar met N7 en N8 zoals ze ingevoerd moeten worden?
Verwijderde gebruiker
10 jaar geleden
Je hoeft niks in te vullen voor N7 en N8, het zijn aliassen voor de tabellen. Het statement zou gewoon moeten werken, het is helemaal correct. Er zou eventueel nog een extra clause kunnen hebben om alleen gedaalde liedjes te tonen..
Verwijderde gebruiker
10 jaar geleden
Tnx lakkie. Ik ben er vanuit gegaan dat notering.id een foreign key is naar liedjes.id. En inderdaad, als je negatieve dalingen wilt uitsluiten kan er nog AND N8.position > N7.position bij... Die N7 en N8 zijn maar bedachte aliassen, je mag daar ook andere woorden zetten.
Verwijderde gebruiker
10 jaar geleden
Ik heb ingevuld wat u mij verteld heeft maar helaas geeft PHPmyadmin een foutmelding. Ik heb nu een afbeelding toegevoegd waarin de relatie wordt weergegeven.
Verwijderde gebruiker
10 jaar geleden
Kun je de CREATE statements van de tabellen delen?
Verwijderde gebruiker
10 jaar geleden
De CREATE statement is als volgt: CREATE DATABASE IF NOT EXISTS `top2000` ;
USE `top2000`; -- -------------------------------------------------------- --
-- Table structure for table `liedjes`
-- CREATE TABLE IF NOT EXISTS `liedjes` (
`id` int(5) default NULL,
`artist` varchar(44) default NULL,
`title` varchar(50) default NULL,
`year` int(4) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8; --
-- Dumping data for table `liedjes`
-- INSERT INTO `liedjes` (`id`, `artist`, `title`, `year`) VALUES
(90001, '10CC', 'Silly love', 1974),
(hieronder volgen nog meer liedjes in het zelfde formaat als de regel hierboven)
Verwijderde gebruiker
10 jaar geleden
OK, niets bijzonders te zien. Is het niet gewoon dat de quotes veranderd zijn door deze site? Vervang even de aanhalingstekens rond 'Guus Meeuwis'.
Verwijderde gebruiker
10 jaar geleden
Yes! Hartelijk dank. Hij werkt nu perfect. Ik ben helaas geen niveau 2, dus ik kan u geen duimpje omhoog geven, maar u krijgt zeker het beste antwoord.
Verwijderde gebruiker
10 jaar geleden
Helemaal mooi :)

Weet jij het beter..?

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

0 / 2500
Gekozen afbeelding