[MySQL]JOIN

Pagina: 1
Acties:

  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 13-08 17:12

NDF82

Doomed Space Marine

Topicstarter
Hi,

Na wat zoeken kwam ik erachter dat mysql geen sub-queries aankan. Nou staat er in de FAQ dat je dat met JOIN kunt oplossen.

De tabellen:
code:
1
2
3
4
5
6
7
8
GEBRUIKER    GEBRUIKERGROEP
NAAM         GROEP_ID    NAAM
1            1           1
2            1           2
3            1           3
4            2           4
5            2           5
6            2           6


Ik wil dus van alle namen de namen uit die niet aan een bepaalde groep gekoppeld zijn. Bijv. van GROEP_ID 1 zouden dit de namen 4, 5 en 6 zijn.

De Queries
code:
1
2
3
4
5
6
SELECT NAAM
FROM GEBRUIKER
WHERE NAAM NOT IN
(SELECT NAAM
    FROM GEBRUIKERGROEP
    WHERE GROEP_ID = '1')


Dit is dus mijn querie met een subquerie. Ik heb wat geprobeerd met JOINs en verder dan dit kom ik niet.

code:
1
2
3
4
5
SELECT GEBRUIKER.NAAM
FROM GEBRUIKER 
LEFT OUTER JOIN GEBRUIKERGROEP 
    ON GEBRUIKER.NAAM = GEBRUIKERGROEP.NAAM 
    WHERE GEBRUIKERGROEP.GROEP_ID='1'


Zou iemand mij kunnen helpen/op weg brengen?

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


Verwijderd

Volgens mij zat je met de subquery goed, ik dacht niet dat dit met een join op te lossen valt.

Verwijderd

Je kan het volgens mij gewoon oplossen door allebei de tabellen in een query mee te nemen enkel dan niet gebruik makend van 'Join'. Ik weet niet helemaal zeker of de volgende query syntactisch klopt maar het zou ongeveer zo moeten:

code:
1
SELECT gg.groep_id FROM Gebruiker AS g, Gebruikergroep AS gg WHERE g.Naam = gg.Naam AND gg.groep_id <> 1

[ Voor 4% gewijzigd door Verwijderd op 06-11-2003 15:18 ]


  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 13-08 17:12

NDF82

Doomed Space Marine

Topicstarter
De subqueries zijn dus het probleem, die werken niet in mysql. In de FAQ staat dat ik met JOINs moet werken, maar daar snap ik dus niet echt veel van. Heb al een zooi uit voorbeelden geprobeerd toe te passen, maar ik krijg niet de juiste resultaten :|

edit @ baby: zal het gelijk ff proberen

[ Voor 8% gewijzigd door NDF82 op 06-11-2003 15:14 ]

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


Verwijderd

SELECT Gebruiker.Naam, GEBRUIKERGROEP.GROEP_ID
FROM Gebruiker INNER JOIN GEBRUIKERGROEP ON Gebruiker.Id = GEBRUIKERGROEP.Id
WHERE (((Gebruiker.Naam)=[GEBRUIKER].[NAAM]) AND ((GEBRUIKERGROEP.GROEP_ID)<>1));

dit is de oplossing die je zoekt denk ik.

[ Voor 12% gewijzigd door Verwijderd op 06-11-2003 15:15 ]


  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 13-08 17:12

NDF82

Doomed Space Marine

Topicstarter
Baby, bedankt, het werkte:

SELECT g.NAAM FROM GEBRUIKER AS g, GEBRUIKERGROEP AS gg WHERE g.NAAM = gg.NAAM AND gg.groep_id <> 23

Qube, die van jou kreeg ik niet werkend, hij begon te moiepen over die vierkante haken.

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 15-07 20:09

dArtagnan

Een voor allen, allen voor een

NDF82 schreef op 06 november 2003 @ 15:13:
De subqueries zijn dus het probleem, die werken niet in mysql. In de FAQ staat dat ik met JOINs moet werken, maar daar snap ik dus niet echt veel van. Heb al een zooi uit voorbeelden geprobeerd toe te passen, maar ik krijg niet de juiste resultaten :|

edit @ baby: zal het gelijk ff proberen
Met mySQL 4.1.x en hoger werken subqueries wel. :)
Starting with version 4.1, MySQL supports all subquery forms and operations which the SQL standard requires, as well as a few features which are MySQL-specific. The main advantages of subqueries are:

Verwijderd

Er zijn 2 soorten joins: INNER en OUTER.

INNER:
voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
PERSONEN
ID | NAAM
1  | Jan
2  | Klaas


E-MAILS
PERSOONSID | E-MAIL
1          | test@test.com


Inner join:
code:
1
2
3
SELECT p.NAAM, e.E-MAIL 
FROM PERSONEN p, E-MAILS e
WHERE p.ID = e.PERSOONSID

resultaat:
code:
1
Jan | test@test.com

Zoals je ziet komt klaas niet voor. Dit komt doordat hij geen e-mailadres heeft.

Outer Join:
LEFT en RIGHT
code:
1
SELECT p.NAAM LEFT JOIN E-MAILS e ON p.ID = e.PERSOONSID

Resultaat:
code:
1
2
Jan | test@test.com
Klaas | <NULL>

Hij pakt nu alle namen en als er een e-mail adres bij hoort dan toont hij deze.

Bij de LEFT join toont tie alle waardes van de LINKER kolom en kijk of er een waarde bijhoort in de tabel die gejoined wordt.

BIJ RIGHT join kijkt tie van de RECHTER kolom welke waardes in de gejoinded overeenkomen. (Tabellen draaien dus om).
Pagina: 1