Archief - MYSQL: query: records uit tabel - andere recs uit andere tabel

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Calvin

Legacy Member
MYSQL:

Probleem met het vinden van een bepaalde recordset... (Had beter moeten opletten tijdens de les lang geleden)

Ik heb volgende info in 3 tabellen:

1) tabel met usernames en id (+bijhorende info)
mysql> select id, nic_name from users;
+----+--------------+
| id | nic_name |
+----+--------------+
| 1 | lieven |
| 2 | lazy charles |
| 3 | guest |
| 8 | lievendp |
| 9 | stijn |
| 10 | maarten |
| 11 | maria |
+----+--------------+
7 rows in set (0.02 sec)

2) tabel met categoriën
mysql> select id, name from categories;
+----+---------+
| id | name |
+----+---------+
| 1 | duiken |
| 2 | deviant |
| 16 | dr fun |
| 18 | tattoo |
| 19 | test |
+----+---------+
5 rows in set (0.01 sec)

3) deze derde tabel zorgt voor een x-to-x relatie tssn de categoriën en de users. Het wil bedoelen dat bepaalde users toegang hebben op bepaalde categoriën.
mysql> select user_id, category_id from protections;
+---------+-------------+
| user_id | category_id |
+---------+-------------+
| 8 | 1 |
| 11 | 1 |
| 8 | 19 |
+---------+-------------+
3 rows in set (0.01 sec)

Ten eerste zocht ik de namen en userids van de users die toegang hebben tot een bepaalde categorie bv: 1 Dit was mogelijk met volgende query:
mysql> select u.id, u.name, c.id, c.name from users u, categories c, protections p where c.id = 1 and u.id = p.user_id and c.id = p.category_id;
+----+----------------+----+--------+
| id | name | id | name |
+----+----------------+----+--------+
| 8 | Lieven DP test | 1 | duiken |
| 11 | Maria | 1 | duiken |
+----+----------------+----+--------+
2 rows in set (0.02 sec)

Maar dan nu zoek ik een query waarmee ik dus de namen en id's van alle users kan vinden die geen toegang hebben tot een bepaalde categorie bv:1
maw: de namen (ids) van alle records in de users tabel - de namen (ids) van de protections tabel die als protections.category_id de waarde één (1) hebben... Helaas heb ik niet genoeg opgelet tijdens de lessen sql...
Dus had ik hetvolgende ineengeknutseld:
mysql> select u.id, u.name from users u, categories c, protections p where c.id = 1 and u.id != p.user_id and p.category_id = c.id;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | lieven |
| 2 | Karel De Puysseleir |
| 3 | guest |
| 9 | Stijn |
| 10 | Maarten |
| 11 | Maria |
| 1 | lieven |
| 2 | Karel De Puysseleir |
| 3 | guest |
| 8 | Lieven DP test |
| 9 | Stijn |
| 10 | Maarten |
+----+---------------------+
12 rows in set (0.00 sec)
=> In de eerste reeks (1tem11) mankeert enkel de user "Lieven DP test" en in de tweede reeks (1tem10) mankeert enkel de user "Maria"
=> Eigenlijk wil ik slechts één reeks waarin beide namen mankeren:
1 lieven
2 Karel De Puysseleir
3 guest
9 Stijn
10 Maarten

Kan iemand me zeggen waar de fout zit? één of andere AND clausule die mankeert? Ik herinnerde me vaag iets van "select ... " minus "select ... " maar minus geeft een error in mysql.

bedankt,
Lieven

PerfectPC

Legacy Member
ik denk dat gij dringend join's moet bekijken ;)
(en de mysql syntax eens bestuderen, staat uitgebreid online)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan