[mySQL] Welke JOIN moet ik gebruiken?

Pagina: 1
Acties:

  • BetuweKees
  • Registratie: Januari 2003
  • Laatst online: 15-05 20:44

BetuweKees

Flipje uit Tiel

Topicstarter
Heb een probleem met het vinden van de juiste JOIN query; heb momenteel twee tabelen:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TABLE_A
+-------+-------+
|  id_a | id_b  |
+-------+-------+
|  1    |  2    |
+-------+-------+


TABLE_B
+-------+-------+
|  id_b | value |
+-------+-------+
|  1    |  a    |
|  2    |  b    |
|  3    |  c    |
+-------+-------+



Nou zoek ik een query die me het volgende resultaat geeft:

code:
1
2
3
4
5
6
7
8
RESULT
+-------+-------+-------+
|  id_a |  id_b | value |
+-------+-------+-------+
|  null |  1    |  a    |
|  2    |  2    |  b    |
|  null |  3    |  c    |
+-------+-------+-------+



Heb al verschillende JOINs geprobeerd LEFT JOIN van table_a op table_b, RIGHT JOIN table_a op table_b, table_b op table_a, etc, maar wil maar niet lukken..
Zou het erg op prijs stellen als iemand me hier mee zou kunnen helpen..

Through meditation I program my heart to beat breakbeats and hum basslines on exhalation -Blackalicious || *BetuweKees was AFK; op de fiets richting China en verder


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 15:13
Een basis opzetje wat zou moeten werken:
code:
1
SELECT fields FROM a RIGHT JOIN b ON b.id=a.b_id

Verwijderd

code:
1
2
3
4
5
6
7
8
SELECT
   id_a,
   id_b,
   value
FROM
   TABLE_B
      LEFT JOIN
         TABLE_A ON TABLE_B.id_b = TABLE_A.id_b

  • BetuweKees
  • Registratie: Januari 2003
  • Laatst online: 15-05 20:44

BetuweKees

Flipje uit Tiel

Topicstarter
hmm.. misschien dat ik alles een beetje te veel gesimplificeerd heb..
query van cheetah werk idd prima, waarvoor dank, maar zie nu dat het helaas mis gaat wanneer ik een WHERE toevoeg. in uiteindelijke database zit er nl nog een extra id bij table_a (laten we em id_c noemen) waarvan de waarde wordt vergeleken, dus indien id_c = c wordt het gevraagde tabeltje weergegeven..
heeft iemand enig idee hoe ik dat moet doen?

Through meditation I program my heart to beat breakbeats and hum basslines on exhalation -Blackalicious || *BetuweKees was AFK; op de fiets richting China en verder


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:23
Misschien heb je hier nog wat aan.

https://fgheysels.github.io/


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 15:13
Query van Cheatah is zo ongeveer hetzelfde maar dan andersom :)

Verder vind ik je omschrijving een beetje vaag. Als je gewoon WHERE a.c_id=waarde doet dan zal je echt alleen maar de records krijgen die daar aan voldoen hoor.

  • GlowMouse
  • Registratie: November 2002
  • Niet online
code:
1
SELECT a.id_a,a.id_b,b.value FROM TABLE_A a,TABLE_B b WHERE a.id_b=b.id_b AND a.id_c=c


Werkt dat niet?

[ Voor 6% gewijzigd door GlowMouse op 13-11-2003 21:47 . Reden: ook 3de id toegevoegd ]


  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 13:43
dat is een inner join

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 15:13
Dan krijg je dus niet die null waarden die je in het tabelletje van de TS ziet. En dus niet alle waarden die hij wil hebben.

  • BetuweKees
  • Registratie: Januari 2003
  • Laatst online: 15-05 20:44

BetuweKees

Flipje uit Tiel

Topicstarter
ok dan toch maar het abstractie weghalen.. hier betreffende stukje uit me database:


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
TIJD_VERBINDING:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
SELECT verbinding_id, categorie_id FROM tijd_verbinding WHERE categorie_id = '5';
+---------------+--------------+
| verbinding_id | categorie_id |
+---------------+--------------+
|             1 |            5 |
|             2 |            5 |
|             3 |            5 |
|             4 |            5 |
|             5 |            5 |
|             6 |            5 |
+---------------+--------------+


TIJD_OVERZICHT:
¯¯¯¯¯¯¯¯¯¯¯¯¯¯
SELECT tijd_id, leden_id, verbinding_id FROM tijd_overzicht WHERE leden_id = '6';
+---------+----------+---------------+
| tijd_id | leden_id | verbinding_id |
+---------+----------+---------------+
|       6 |        6 |             1 |
|      26 |        6 |             2 |
|      45 |        6 |             3 |
|      62 |        6 |             4 |
+---------+----------+---------------+



SELECT
    t.tijd_id, 
    t.leden_id, 
    v.verbinding_id, 
    v.categorie_id 
FROM 
    tijd_verbinding AS v 
    LEFT JOIN tijd_overzicht AS t ON t.verbinding_id = v.verbinding_id 
WHERE 
    t.leden_id = '6'
    AND v.categorie_id = '5';
+---------+----------+---------------+--------------+
| tijd_id | leden_id | verbinding_id | categorie_id |
+---------+----------+---------------+--------------+
|       6 |        6 |             1 |            5 |
|      26 |        6 |             2 |            5 |
|      45 |        6 |             3 |            5 |
|      62 |        6 |             4 |            5 |
+---------+----------+---------------+--------------+



Maar ik wil dit:
code:
1
2
3
4
5
6
7
8
9
10
+---------+----------+---------------+--------------+
| tijd_id | leden_id | verbinding_id | categorie_id |
+---------+----------+---------------+--------------+
|       6 |        6 |             1 |            5 |
|      26 |        6 |             2 |            5 |
|      45 |        6 |             3 |            5 |
|      62 |        6 |             4 |            5 |
|    null |     null |             5 |            5 |
|    null |     null |             6 |            5 |
+---------+----------+---------------+--------------+



ik hoop dat dat duidelijker is..
nu ik me eigen voorbeeld zo zie snap ik ook dat die WHERE op leden_id die ik gebruik nooit kan werken, omdat daarmee de NULL waardes uitgefilterd gaan worden. Als ik verrander in (t.leden_id = '6' OR t.leden_id = NULL) blijft het resultaat echter gewoon hetzelfde..
Hoe zou ik dit wel kunnen oplossen??

Through meditation I program my heart to beat breakbeats and hum basslines on exhalation -Blackalicious || *BetuweKees was AFK; op de fiets richting China en verder


  • BetuweKees
  • Registratie: Januari 2003
  • Laatst online: 15-05 20:44

BetuweKees

Flipje uit Tiel

Topicstarter
sorry voor het schopje, maar iemand die weet hoe ik dit kan oplossen?

Through meditation I program my heart to beat breakbeats and hum basslines on exhalation -Blackalicious || *BetuweKees was AFK; op de fiets richting China en verder


Verwijderd

je moet dan IS NULL of IS NOT NULL gebruiken, en niet = NULL of != NULL
Pagina: 1