Een tegenovergestelde JOIN

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Net-marker

net-marker

07/11/2006 20:29:00
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>";            
            }


?>
 
PHP hulp

PHP hulp

18/11/2024 20:29:30
 
Steff   an

Steff an

07/11/2006 20:31:00
Quote Anchor link
Zoek eens in de mysql-docs(google) de functie OUTER JOIN op. Volgens mij kan het daar mee.
Gewijzigd op 01/01/1970 01:00:00 door Steff an
 
Willem Jan Z

Willem Jan Z

07/11/2006 20:41:00
Quote Anchor link
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
Gewijzigd op 01/01/1970 01:00:00 door Willem Jan Z
 
Klaasjan Boven

Klaasjan Boven

07/11/2006 20:58:00
Quote Anchor link
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)
 
Willem Jan Z

Willem Jan Z

07/11/2006 21:09:00
Quote Anchor link
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
 
Net-marker

net-marker

07/11/2006 21:16:00
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 "
;
?>
 
Net-marker

net-marker

07/11/2006 21:23:00
Quote Anchor link
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
 
John de Boer

John de Boer

07/11/2006 21:59:00
Quote Anchor link
iets in de geest van

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
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.
Gewijzigd op 01/01/1970 01:00:00 door John de Boer
 
Net-marker

net-marker

07/11/2006 22:03:00
Quote Anchor link
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
 
Jan Koehoorn

Jan Koehoorn

07/11/2006 22:13:00
Quote Anchor link
Het kan ook met een subquery:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
    SELECT nummer
    FROM tabel1
    WHERE nummer NOT IN
    (
    SELECT nummer
    FROM tabel2
    )

Edit:

post van Klaasjan niet gelezen, sorry :-)
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 
Willem Jan Z

Willem Jan Z

09/11/2006 11:35:00
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'

Het SQL leerboek - Rick F. van der Lans

Maar ik denk dat MySQL het gewoon niet pikt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
    


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
 
Net-marker

net-marker

10/11/2006 18:58:00
Quote Anchor link
Ik heb nog steeds het probleem niet op kunnen lossen. Ik zal nog even voor de duidelijkheid uitleggen wat ik wil berijken

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)
PHP script in nieuw venster Selecteer het PHP script
1
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)"
;


?>




2) Hierbij wordt helemaal niks weergegeven
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 "
;
?>



3) geeft ook niks weer
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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"
;
?>


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
 
Kalle P

Kalle P

10/11/2006 20:07:00
Quote Anchor link
Zoiets?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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."
            )
"

?>


edit:
() ipv {} --> foutje ;P
Gewijzigd op 01/01/1970 01:00:00 door Kalle P
 
PHP Newbie

PHP Newbie

10/11/2006 20:11:00
Quote Anchor link
SELECT iets FROM werknemers_in_gebruik WHERE (SELECT id FROM tabel) IS NOT IN werknemers_in_gebruik.

Zoiets, ik weet hem niet precies, maar ik denk dat iemand anders hem wel even goed kan maken.
 
Net-marker

net-marker

10/11/2006 21:19:00
Quote Anchor link
Ik heb de code van Kalle geprobeerd
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
                                    }"
;
?>


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
 
Frank -

Frank -

10/11/2006 21:24:00
Quote Anchor link
Welke versie van MySQL heb je? Ondersteunt deze wel sub-queries?
 
Net-marker

net-marker

10/11/2006 21:55:00
Quote Anchor link
ik gebruik
phpMyAdmin 2.6.2-pl1
MySQL 4.1.14-standard
 
Kalle P

Kalle P

10/11/2006 21:58:00
Quote Anchor link
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.
Gewijzigd op 01/01/1970 01:00:00 door Kalle P
 
Klaasjan Boven

Klaasjan Boven

10/11/2006 22:18:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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                
                )"
;                    
?>


zo zou het moeten werken volgen smij
 
Net-marker

net-marker

11/11/2006 11:13:00
Quote Anchor link
Ja nu geeft hij weer alle namen uit tabel werknemers weer. Ookal zijn ze in de andere tabel ook aanwezig.
 
Willem Jan Z

Willem Jan Z

11/11/2006 11:53:00
Quote Anchor link
Dit werkt bij mij wel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT *
FROM test1
WHERE naam NOT IN (
    SELECT naam FROM test2);
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.