Tabel gegevens weergeven via join en distinct
Voorbeeld
Tabel1
ID1 Naam
1 Piet
2 Kees
3 Klaas
Tabel2
ID2 ID1 Tekst
1 1 Test Piet
2 1 Test2
3 1 Test3 Piet
4 2 Test Kees
5 3 Test Klaas
Mysql query
SELECT DISTINCT Tabel1.Naam,Tabel2.Tekst FROM Tabel1
LEFT JOIN Tabel2 ON (Tabel2.ID1=Tabel1.ID1)
WHERE Tabel2.Tekst NOT LIKE '%Test2%' ORDER BY Naam
Nu wil ik dat het record van Piet niet (ID1 1) wordt weergegeven in de select. Op het ogenblik krijg ik drie record terug... Ik wil alleen het resultaat van Kees en Klaas zien in de select. Ik heb de Not like al direct in de join gezet, of met outer join, inner join maar dat werkt ook helaas niet.
Code (php)
1
2
3
4
5
2
3
4
5
SELECT DISTINCT Tabel1.Naam,Tabel2.Tekst FROM Tabel1
LEFT JOIN Tabel2 ON (Tabel2.ID1=Tabel1.ID1)
WHERE Tabel2.Tekst NOT LIKE '%Test2%'
AND Tabel1.ID1 != 1
ORDER BY Naam
LEFT JOIN Tabel2 ON (Tabel2.ID1=Tabel1.ID1)
WHERE Tabel2.Tekst NOT LIKE '%Test2%'
AND Tabel1.ID1 != 1
ORDER BY Naam
Je schrijft dat je met de beschreven query 3 records terug krijgt. Dat snap ik niet, want in die query wordt alleen het record met 'Test2' uitgezonderd, zodat er 4 records overblijven.
Sorry voor de verwarring Ik had "Tabel2.Tekst" weghaal uit mijn query.
Het per ID uitfilteren is helaas geen optie omdat er meer dan deze 5 records in tabel 2 staan. Ik wil alleen de records wegfilteren waarbij "Test2" is ingevuld met het daarbij behorende id van tabel1. Dus in het onderstaande voorbeeld wil ik alleen Test Kees en Test Klaas terug krijgen
1 1 Test Piet
2 1 Test2
3 1 Test3 Piet
4 2 Test Kees
5 3 Test Klaas
Super Ger de query werkt! Alleen als ik er een count bij zet (bij de eerste select) krijg ik een heel vreemd totaal terug? Als ik de count weghaal krijg ik wel de juiste records terug.
Wil je nu toch weten (zonder in php te hoeven tellen) hoeveel keer bepaalde persoon in tabel2 voorkomen kan je zoiets doen:
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
t1.naam,
t1.aantal,
t2.tekst
FROM
(SELECT
t1a.naam,
t1a.id1,
COUNT(t2a.id) aantal
FROM
tabel1 t1a
INNER JOIN
tabel2 t2a ON t1a.id1 = t2a.id1
GROUP BY
t1a.naam, t1a.id1
HAVING
t1a.id1 NOT IN (SELECT DISTINCT id1 FROM tabel2 WHERE tekst LIKE '%test2%')
) t1
INNER JOIN
tabel2 t2 ON t1.id1 = t2.id1
t1.naam,
t1.aantal,
t2.tekst
FROM
(SELECT
t1a.naam,
t1a.id1,
COUNT(t2a.id) aantal
FROM
tabel1 t1a
INNER JOIN
tabel2 t2a ON t1a.id1 = t2a.id1
GROUP BY
t1a.naam, t1a.id1
HAVING
t1a.id1 NOT IN (SELECT DISTINCT id1 FROM tabel2 WHERE tekst LIKE '%test2%')
) t1
INNER JOIN
tabel2 t2 ON t1.id1 = t2.id1