Query bevat een fout
Ik heb de hieronder getoonde query gemaakt maar die geeft op de velden LABEL en AFBEELDING een NULL terug. De andere twee velden worden juist getoond.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT
a.id AS relatie,
a.artiest AS uitvoerende,
l.label,
l.afbeelding
FROM
shop__artiesten AS a
LEFT JOIN
shop__cd AS c
ON
a.id = c.uitvoerende
left JOIN
shop__platenlabel AS l
ON
c.label = l.afbeelding
GROUP BY
a.artiest
ORDER BY
a.artiest ASC
a.id AS relatie,
a.artiest AS uitvoerende,
l.label,
l.afbeelding
FROM
shop__artiesten AS a
LEFT JOIN
shop__cd AS c
ON
a.id = c.uitvoerende
left JOIN
shop__platenlabel AS l
ON
c.label = l.afbeelding
GROUP BY
a.artiest
ORDER BY
a.artiest ASC
Voeg ik de volgende WHERE toe dan krijg ik helemaal geen output. Het lijkt er dus op dat er iets mis gaat met de JOIN van de tabel shop__platenlabel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
a.id AS relatie,
a.artiest AS uitvoerende,
l.label,
l.afbeelding
FROM
shop__artiesten AS a
LEFT JOIN
shop__cd AS c
ON
a.id = c.uitvoerende
left JOIN
shop__platenlabel AS l
ON
c.label = l.afbeelding
WHERE
l.label = 'Tulip'
GROUP BY
a.artiest
ORDER BY
a.artiest ASC
a.id AS relatie,
a.artiest AS uitvoerende,
l.label,
l.afbeelding
FROM
shop__artiesten AS a
LEFT JOIN
shop__cd AS c
ON
a.id = c.uitvoerende
left JOIN
shop__platenlabel AS l
ON
c.label = l.afbeelding
WHERE
l.label = 'Tulip'
GROUP BY
a.artiest
ORDER BY
a.artiest ASC
Waar zit mijn denkfout?
Gewijzigd op 24/10/2013 12:31:26 door George van Baasbank
Lijkt erop alsof je de verkeerde velden pakt voor de joins. c.label = l.afbeelding bijvoorbeeld, terwijl er ook een veld l.label is. Het lijk mij logischer dat het dus c.label = l.label moet zijn. Maar ja, zonder inzicht in je tabellen is er niet meer over te zeggen.
tabel shop__artiesten (a)
1. id = het relatienummer van het record << relatieveld -A- >>
2. artiest = naam van de artiest (uitvoerende) << uiteindelijk resultaat >>
tabel shop__cd (c)
1. uitvoerende = relatieveld met (a) id << relatieveld -A- >>
2. label = bestandsnaam afbeelding platenlabel << relatieveld -B- >>
tabel shop__platenlabel (l)
1. afbeelding = bestandsnaam afbeelding platenlabel << relatieveld -B- >>
2. label = naam van het platenlabel << WHERE-veld -C- >>
Toevoeging op 24/10/2013 13:30:37:
Ik heb de query iets anders opgebouwd en nu werkt hij uitstekend:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
select
c.uitvoerende
from
shop__platenlabel as l
left join
shop__cd as c
on
c.label = l. afbeelding
left join
shop__artiesten as a
on
a.id = c.uitvoerende
where
l.label = 'tulip'
group by
c.uitvoerende
order by
c. uitvoerende asc
c.uitvoerende
from
shop__platenlabel as l
left join
shop__cd as c
on
c.label = l. afbeelding
left join
shop__artiesten as a
on
a.id = c.uitvoerende
where
l.label = 'tulip'
group by
c.uitvoerende
order by
c. uitvoerende asc
Waar de oorzaak lag/ligt weet ik niet. Wellicht kan iemand mij dit nog uitleggen
Als l links van de left join staat kan l.label NULL zijn, nu zet je hem rechts.
Daarnaast heb je een fout gebruik van group by (nergens een aggegrate functie).