Hoort bij: MySQL — Tags:, , , , , — admin @ 23 oktober 2008 11:29

Het verwijderen van rijen in MySQL met een relatie kan soms een lastige taak zijn. Om deze taak gemakkelijker te maken kan je delete queries gaan uitvoeren met een left join. Hoe je dit doet zal ik in het volgende voorbeeld laten zien.

Database structuur

Als eerste tabel heb je “gebruiker” met als kolommen ID, gebruiker_voornaam en gebruiker_achternaam. De tweede tabel die je nodig hebt in dit voorbeeld is “project” met als kolommen ID, gebruiker_ID en project_naam.

Als je het voorbeeld wilt volgen op je eigen MySQL server kan je de volgende queries gebruiken om de tabellen aan te maken.

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE TABLE `gebruiker` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`gebruiker_voornaam` varchar(20) NOT NULL,
`gebruiker_achternaam` varchar(30) NOT NULL,
PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
 
INSERT INTO `gebruiker` (`ID`, `gebruiker_voornaam`, `gebruiker_achternaam`) VALUES
(1, 'Jef', 'Vermassen'),
(2, 'Wim', 'Jansen');
 
CREATE TABLE `project` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`gebruiker_ID` int(11) NOT NULL,
`project_naam` varchar(30) NOT NULL,
PRIMARY KEY  (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
 
INSERT INTO `project` (`ID`, `gebruiker_ID`, `project_naam`) VALUES
(1, 1, 'Website debuggen'),
(2, 1, 'PHP leren'),
(3, 2, 'Computer herstellen');

In deze database kan je gebruikers toevoegen en aan deze gebruikers kan je dan projecten hangen. Het is maar een voorbeeld database dus ik heb het zeer simpel gehouden.

Left join delete

Stel nu dat je een gebuiker uit de database wilt verwijderen samen met al zijn projecten.
Dit kan je doen met één enkele query die er als volgt uit ziet

0
1
2
3
DELETE g.*, p.*
FROM `gebruiker` g
LEFT JOIN `project` p ON g.ID = p.gebruiker_ID
WHERE g.ID = '1'

Op het eerste zicht is er niet iets heel bijzonders aan deze query maar niets is minder waar. Achter onze delete moet je expliciet zeggen welke kolommen je wilt verwijderen. Als je dit niet doet zal de query mislukken. Zou je dus in plaats van g.*, p.* een * gebruiken om je kolommen te selecteren krijgen je een error als deze:

#1064 - You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '*
FROM `gebruiker` g
LEFT JOIN `project` p ON g.ID = p.gebruiker_ID
WHERE g.' at line 1

Belangrijk om te onthouden is dus dat je altijd expliciet de kolommen moet opgeven bij een join delete.

Stem of voeg toe aanUitleg over het gebruik van deze icons :  Plaatsen/stemmen op NUjij Plaatsen/stemmen op eKudos Plaatsen/stemmen op MSN Reporter Plaatsen/stemmen op Digg Stumble it! Voeg dit artikel toe aan Del.icio.us Voeg toe aan je Google bladwijzers Abonneer je op de RSS-feed van deze site Verstuur deze pagina per e-mail via Feedburner

Reacties

Reageren? »

Reageren?

Berichten RSS voor reacties op dit bericht. TrackBack URL

Geef een reactie