Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySQL] Meerdere relaties naar tabel 2

Pagina: 1
Acties:

  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
Ik weet niet precies hoe ik het onderstaande resultaat kan bereiken. In tabel heb ik meerdere velden die ik wil opzoeken in tabel 2. De naam daarvan wil ik in elk result plakken.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Tabel1                  Tabel2
+------+-----+------+   +---------+----------+
| naam | dag | nacht|   | artikel |  naam    |
+------+-----+------+   +---------+----------+
| kiwi |  1  |  2   |   |   1     | artikel1 |
| ...  | ... | .... |   |   2     | artikel2 |
+------+-----+------+   +---------+----------+

Resultaat van Query:
+------+-----+-------------------+-------+------------------+
| naam | dag | artikelnaamdag    | nacht | artikelnaamnacht |
+------+-----+-------------------+-------+------------------+
| kiwi |  1  | artikel1          |   2   |    artikel2      |
| ...  | ... | ....              | ....  | .......          | 
+------+-----+-------------------+-------+------------------+

Voor 1 koppeling lukt dat me nog wel met de volgende query:
SQL:
1
2
3
SELECT p.naam, p.dag, d.naam p.nacht
FROM tabel1 p, tabel2 d,
WHERE (p.dag = d.artikel);

Alleen dan heb ik nog niet het gewenste resultaat natuurlijk.
Hoe moet ik dit oplossen?

Ook heb ik gelezen dat WHERE eigenlijk obsolete is en dat ik JOINS moet gebruiken?
Is echt echt beter om WHERE niet meer te gebruiken of valt dit mee?

[ Voor 6% gewijzigd door Gehakt op 17-01-2008 22:24 ]


Verwijderd

Ik moest even goed kijken wat je precies bedoelde maar ik denk dat ik em snap. Zelf geef ik joins altijd aan met het JOIN keyword, zo zie ik beter het verschil tussen m'n join-condities en 'gewone' condities.

SQL:
1
2
3
4
SELECT p.naam, p.dag, d1.naam, p.nacht, d2.naam
FROM tabel1 p
JOIN tabel2 d1 ON p.dag = d1.artikel
JOIN tabel2 d2 ON p.nacht = d2.artikel


Edit: effectief maakt het niet uit of je FROM table1, table2, etc gebruikt. Het is alleen beter leesbaar vind ik als je JOIN table ON gebruikt.

[ Voor 26% gewijzigd door Verwijderd op 17-01-2008 22:31 ]


  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
Juist, dit is precies de oplossing.
Ik had wel een beetje een idee maar ik miste nog een stukje van de puzzel.
En dat was dat het gedeelte waarmee dat een tabel2 meerdere keren ondervraagt zeg maar.

Het probleem is alleen dat dit getest in MySQL prima werkt.
En ik verwachte eigenlijk dat het ook prima in OpenOffice Base zou werken.
Maar dat is dus niet het geval.
Iemand die daar ervaring mee heeft?

[ Voor 34% gewijzigd door Gehakt op 17-01-2008 23:02 ]


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Geen idee, maar misschien werken daar die joins niet mee? Of moet je daar AS gebruiken? Probeer eens iets als:
SQL:
1
2
3
4
SELECT p.naam AS naam, p.dag AS dag, d1.naam AS artikelnaamdag, 
       p.nacht AS nacht, d2.naam AS artikelnaamnacht
FROM tabel1 AS p, tabel2 AS d1, tabel2 AS d2 
WHERE p.dag = d1.artikel AND p.nacht = d2.artikel

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • Gehakt
  • Registratie: Juli 2002
  • Laatst online: 24-10 20:19
Ah in plaats van alleen JOIN moest ik "INNER JOIN" gebruiken en AS hielp ook erg mee.

Verwijderd

Tja, er zijn zoveel 'dialecten' SQL, maar ik heb net even Base opgestart, en hij pakt inderdaad JOIN niet. Eigenlijk is JOIN een afkorting voor INNER JOIN, en dat lijkt wel te werken in Base. Overigens staat er op wikipedia natuurlijk een artikeltje met uitleg over alle soorten joins in SQL.

Edit: ah te laat, je was er zelf ook al achter ;)

[ Voor 8% gewijzigd door Verwijderd op 18-01-2008 00:06 ]

Pagina: 1