hallo ik heb een join waarbij ik de waardes die overeenkomen in tabel A en B worden opgehaald. Wat ik nu wil is dat de waardes uit tabel A worden opgehaald min de waardes (die overeen komen) die al vermeld zijn in tabel B

dus in tabel A staat
id 1,2,3,4,5

en tabel B staat
id 1,4

de uitkomst moet dan 2,3,5 zijn

Kan iemand mij vertellen hoe ik dit het beste kan aanpakken?

dit is de code die ik nu heb.

<?php
//gegevens uit tabel weergeven in drop down menu



$query_werknemer="SELECT * FROM werknemers INNER JOIN werknemers_in_gebruik ON werknemers.msg_werknemers_id = werknemers_in_gebruik.msg_werknemers_id ";

$result_werknemer = mysql_query($query_werknemer) or die(mysql_error());

while( $data = mysql_fetch_array($result_werknemer))

{
echo '<input name="msg_werknemer[]" type="checkbox" value="'.$data['msg_werknemers_id'].'<br>">';
echo "".(stripslashes ($data['msg_v_naam']))." ";
echo "".(stripslashes ($data['msg_a_naam']))."<br>";
}

?>
Zoek eens in de mysql-docs(google) de functie OUTER JOIN op. Volgens mij kan het daar mee.
Nee, er is een andere term voor, ben alleen de naam kwijt...
Je hebt UNION, en je hebt...

[me]pakt zijn SQL beok erbij[/me]

Edit: Kon boek niet vinden, dan maar google :)
Het is vrij simpel: EXCEPT

Edit2: Of toch niet :S Nog even verder zoeken
En het kan ook zo:

SELECT * FROM a - SELECT *FROM B

of

SELECT a.id FROM a WHERE id NOT IN(SELECT id FROM b)

Ja, zo kan het ook, maar ik weet zeker dat er net zo'n commando als UNION was, maar dan iets als EXCEPT, maar kan het nergens terug vinden :S
nee ik kan het ook niet vinden. ik heb de menier van klaasjan ook gebrobeerd, maar die werkte helaas niet (mischien zelf wat verkeerd gedaan)

ik heb het nu opgelost met
<?
$query_werknemer="SELECT werknemers.*
FROM werknemers
LEFT JOIN werknemers_in_gebruik
ON werknemers.msg_werknemers_id=werknemers_in_gebruik.msg_werknemers_id
WHERE
werknemers_in_gebruik.msg_werknemers_id IS NULL ";
?>
Kunnen jullie me mischien vertellen hoe ik bij de WHARE in de tabel werkenmers_in_geberuik kan zorgen dat hij ook nog alleen naar rijden kijkt met msg_int_id =33
iets in de geest van


SELECT werknemers_in_gebruik 
FROM <db> 
WHERE msg_int_id=33 ?


voor db vul je natuurlijk de naam van je database in.

EDIT:
ohw, ik had het dus niet helemaal goed begrepen... ik dacht alleen deze query.
ja ik heb dit gedaan

werknemers_in_gebruik.msg_int_id = 53 AND werknemers_in_gebruik.msg_werknemers_id IS NULL ";

maar dan krijg ik helemaal geen uitkomst meer
Het kan ook met een subquery:

    SELECT nummer
    FROM tabel1
    WHERE nummer NOT IN
    (
    SELECT nummer
    FROM tabel2
    )

[edit]
post van Klaasjan niet gelezen, sorry :-)
[/edit]
Ben mijn kamer aan het opruimen, en vind mijn SQL boek :)
Gelijk even opgezocht, en er staat wel degelijk EXCEPT.

Voorbeeld 12.9 uit boek: Geef het spelersnummer en de geboortedatum van elke speler die wel in Den Haag heeft woont, maar niet na 1960 is geboren.
SELECT SPELERSNR, GEB_DATUM
FROM SPELERS
WHERE PLAATS = 'Den Haag'
EXCEPT
SELECT SPELERSNR, GEB_DATUM
FROM SPELERS
WHERE GEB_DATUM > '1960-12-31'

Het SQL leerboek - Rick F. van der Lans

Maar ik denk dat MySQL het gewoon niet pikt:


mysql> INSERT INTO test(naam,auto) VALUES('Kees',1);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO test(naam,auto) VALUES('Kees',0);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM test WHERE naam = 'Kees'
    -> EXCEPT
    -> SELECT * FROM test WHERE auto = 0;
ERROR 1064 (42000): 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 'EXCEPT
SELECT * FROM test WHERE auto = 0' at line 2
    


Edit: Dit was met mysql Ver 14.12 Distrib 5.0.18, for suse-linux (i686) using readline 5.1

Edit: Op google kan je met EXCEPT MySQL niet veel nuttigs vinden, maar met EXCEPT SQL krijg je wel normale resultaten, ik hou het er maar op dat MySQL het gewoon niet (meer?) ondersteunt.

Reageren