En nog maar eens een probleempje... 
Ik heb 2 tabellen in MySQL. Hieruit wil ik 1 kolom halen aan de hand van gegevens uit beide tabellen. Omdat een simpel voorbeeldje meer zegt dan woorden:
table: cat
table: priv
Een lijst van alle categorienamen maken is makkelijk...
Ik heb al de gekste queries geprobeerd, maar ze geven of foutmeldingen of doen niet wat ik denk dat ze moeten doen. Je zou denken dat je bij de LEFT JOIN priv nog een extra WHERE zou moeten opgeven waarmee naar het user_id gekeken wordt, maar dat geeft een foutieve syntax.
De oplossing is vast eenvoudig, maar ik kom er niet uit
Ik heb 2 tabellen in MySQL. Hieruit wil ik 1 kolom halen aan de hand van gegevens uit beide tabellen. Omdat een simpel voorbeeldje meer zegt dan woorden:
table: cat
code:
Er zitten nog heel wat andere kolommen in deze tabel, maar die doen niet terzake.1
2
3
4
5
6
7
| +----------+----------+ | cat_id | cat_name | +----------+----------+ | 1 | Nieuws | | 2 | Artikels | | 3 | Polls | +----------+----------+ |
table: priv
code:
De bedoeling? Zoals je ziet hebben beide tabellen een 'cat_id' veld. Dit is dan ook het verband tussen de 2 tabellen. Het idee is nu een lijst te maken van alle categorienamen ('cat_name') uit tabel 'cat' die niet voorkomen in tabel 'priv' voor een bepaalde gebruiker ('user_id').1
2
3
4
5
6
7
| +----------+----------+----------+ | priv_id | cat_id | user_id | +----------+----------+----------+ | 1 | 1 | 4 | | 2 | 2 | 3 | | 3 | 2 | 4 | +----------+----------+----------+ |
Een lijst van alle categorienamen maken is makkelijk...
code:
Een lijst van alle categorienamen die niet voorkomen in tabel 'priv':1
| SELECT cat.cat_name FROM cat; |
code:
Maar nu moet er ook nog gekeken worden naar het 'user_id' veld. Bovenstaande query geeft steeds maar 1 resultaat terug ('Polls') omdat cat_id = 3 niet voorkomt in 'priv'. Maar voor user_id = 3 komt 'Nieuws' eveneens niet voor. En voor user_id's anders dan 3 en 4 komt er niets voor in tabel 'priv' en zouden dus alledrie de categorieën uit 'cat' weergegeven moeten worden.1
2
3
4
5
| SELECT cat.cat_name FROM cat LEFT JOIN priv ON cat.cat_id = priv.cat_id WHERE priv.cat_id IS NULL; |
Ik heb al de gekste queries geprobeerd, maar ze geven of foutmeldingen of doen niet wat ik denk dat ze moeten doen. Je zou denken dat je bij de LEFT JOIN priv nog een extra WHERE zou moeten opgeven waarmee naar het user_id gekeken wordt, maar dat geeft een foutieve syntax.
De oplossing is vast eenvoudig, maar ik kom er niet uit
A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.