Een tegenovergestelde JOIN
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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>";
}
?>
//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>";
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Steff an
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
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
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
ik heb het nu opgelost met
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
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.
Gewijzigd op 01/01/1970 01:00:00 door John de Boer
werknemers_in_gebruik.msg_int_id = 53 AND werknemers_in_gebruik.msg_werknemers_id IS NULL ";
maar dan krijg ik helemaal geen uitkomst meer
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.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT SPELERSNR, GEB_DATUM
FROM SPELERS
WHERE PLAATS = 'Den Haag'
EXCEPT
SELECT SPELERSNR, GEB_DATUM
FROM SPELERS
WHERE GEB_DATUM > '1960-12-31'
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
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
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.
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
tabel: werknemers
id | naam
---+-------
1 | peter
2 | jaap
3 | karel
4 | joop
5 | pieter
tabel: werknemers_in_gebruik
int_id| id
------+---
40 | 3
22 | 1
22 | 3
22 | 4
30 | 4
30 | 5
Elke pagina in mijn website krijgt een int_id mee waarmee bepaald word welke content hij op moet halen.
De uitkomst voor pagina met int_id 30 is
peter
jaap
karel
Ik heb al diverse manieren uit geprobeerd
1) hierbij worden alle namen weergegeven totdat er de id nr 1 in de tabel werknemers_in_gebruik staat vermeld. Op dat moment wordt er namelijkhelemaal niks meer weergegeven.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?
$query_werknemer="SELECT *
FROM werknemers
WHERE NOT EXISTS (SELECT *
FROM werknemers_in_gebruik
WHERE msg_werknemers_id=1 AND msg_int_id = 5)";
?>
$query_werknemer="SELECT *
FROM werknemers
WHERE NOT EXISTS (SELECT *
FROM werknemers_in_gebruik
WHERE msg_werknemers_id=1 AND msg_int_id = 5)";
?>
2) Hierbij wordt helemaal niks weergegeven
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
$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 AND werknemers_in_gebruik.msg_int_id= 5 ";
?>
$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 AND werknemers_in_gebruik.msg_int_id= 5 ";
?>
3) geeft ook niks weer
Code (php)
1
2
3
4
5
2
3
4
5
<?
$query_werknemer="SELECT DISTINCT msg_v_naam
FROM werknemers
RIGHT JOIN werknemers_in_gebruik ON werknemers.msg_werknemers_id=werknemers_in_gebruik.msg_werknemers_id AND werknemers_in_gebruik.msg_int_id <> 30";
?>
$query_werknemer="SELECT DISTINCT msg_v_naam
FROM werknemers
RIGHT JOIN werknemers_in_gebruik ON werknemers.msg_werknemers_id=werknemers_in_gebruik.msg_werknemers_id AND werknemers_in_gebruik.msg_int_id <> 30";
?>
is het niet mognelijk om eerst alle waarde op te halen en dan de waarde die al in tabel werkenmers_in_gebruik af te trekken van de uikomst?
Ik hoop dat iemand hier nu een oplossing voor me heeft, of een goed script weet. Ik kom er namelijk echt niet meer uit
Gewijzigd op 01/01/1970 01:00:00 door net-marker
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$query = "
SELECT
naam
FROM
werknemers
WHERE
id <> (
SELECT
id
FROM
werknemers_in_gebruik
WHERE
int_id = ".$uitkomst_pagina."
)
"
?>
$query = "
SELECT
naam
FROM
werknemers
WHERE
id <> (
SELECT
id
FROM
werknemers_in_gebruik
WHERE
int_id = ".$uitkomst_pagina."
)
"
?>
edit:
() ipv {} --> foutje ;P
Gewijzigd op 01/01/1970 01:00:00 door Kalle P
Zoiets, ik weet hem niet precies, maar ik denk dat iemand anders hem wel even goed kan maken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$query_werknemer="SELECT *
FROM
werknemers
WHERE
msg_werknemers_id <> {
SELECT
msg_werknemers_id
FROM
werknemers_in_gebruik
WHERE
msg_int_id = 5
}";
?>
$query_werknemer="SELECT *
FROM
werknemers
WHERE
msg_werknemers_id <> {
SELECT
msg_werknemers_id
FROM
werknemers_in_gebruik
WHERE
msg_int_id = 5
}";
?>
krijg ik de error:
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 'SELECT msg_werknemers_id FROM werknemers_in_g' at line 6
Welke versie van MySQL heb je? Ondersteunt deze wel sub-queries?
phpMyAdmin 2.6.2-pl1
MySQL 4.1.14-standard
http://dev.mysql.com/doc/refman/4.1/en/subqueries.html
Die ondersteunt het wel.
Oh wacht een ingeving, maak eens van de {} (). Dus accolades haakjes maken!
kalle.
edit:
doe ik het weer fout :P.
Die ondersteunt het wel.
Oh wacht een ingeving, maak eens van de {} (). Dus accolades haakjes maken!
kalle.
edit:
doe ik het weer fout :P.
Gewijzigd op 01/01/1970 01:00:00 door Kalle P
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$query_werknemer="
SELECT
jouwding1, jouwding
FROM
werknemers
WHERE
msg_werknemers_id
NOT IN(
SELECT
msg_werknemers_id
FROM
werknemers_in_gebruik
WHERE
msg_int_id = 5
)";
?>
$query_werknemer="
SELECT
jouwding1, jouwding
FROM
werknemers
WHERE
msg_werknemers_id
NOT IN(
SELECT
msg_werknemers_id
FROM
werknemers_in_gebruik
WHERE
msg_int_id = 5
)";
?>
zo zou het moeten werken volgen smij
Ja nu geeft hij weer alle namen uit tabel werknemers weer. Ookal zijn ze in de andere tabel ook aanwezig.