[MYSQL] Alvast een look-up doen in een query.

Pagina: 1
Acties:

  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 14-02 13:01
Beste,

Zie ik nu iets essentieels over het hoofd of is wat ik wil nu gewoon niet mogelijk?
Ik wil een ID nummer waaraan een naam gekoppeld is alvast in de query resolven.

Voorbeeldje is misschien handig :

Ik heb een tabel met een parent-child relatie erin

idnameparent
1nameA5
2nameB6
3nameC6
4nameD5
5Parent10
6Parent20


Nu wil ik alle childs zien met bijbehorende parent.

code:
1
2
SELECT parent ,  name FROM test 
WHERE parent <> 0


Dit geeft netjes het volgende terug :

5 nameA
6 nameB
6 nameC
5 nameD

Paar wat ik wil ->

Parent1 nameA
Parent2 nameB
etc ..

Ik wil dus het parent_id nummer (wat dus het id weer voorstelt) alvast resolven .. maar , dan wel in dezelfde query.

Met een subquery kreeg ik dat niet voor elkaar omdat deze in het select statement staat.
Ik dacht aan iets als :

code:
1
2
3
4
SELECT parent as parent_name, name
FROM test
WHERE parent <> 0
AND parent_name = (SELECT name FROM table where id = parent)


Dit werkt niet. (helaas)..
Is er eigenlijk wel een manier om in 1 query te doen wat ik wil?

Ik gebruik v4.1.19 van Mysql en deze ondersteunt Subquerys.

offtopic:
Ik geloof dat ik hem in het verkeerde sub-forum heb gesubmit :X

[ Voor 3% gewijzigd door om3ega op 13-07-2006 09:24 ]


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Je zal de tabel met zichzelf moeten joinen

offtopic:
je kan overigens Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/tweakers/images/icons/icon_hand.gif gebruiken om een move aan te vragen

  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 22:57

TheDane

1.618

code:
1
2
SELECT id,  parent ,  name FROM test 
WHERE parent <> 0


:?

edit:

Dit is 't niet helemaal, maar waarom wil je in godsnaam Parent1 resolven?

[ Voor 47% gewijzigd door TheDane op 13-07-2006 10:25 ]


  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 14-02 13:01
TheDane schreef op donderdag 13 juli 2006 @ 10:24:
code:
1
2
SELECT id,  parent ,  name FROM test 
WHERE parent <> 0


:?

edit:

Dit is 't niet helemaal, maar waarom wil je in godsnaam Parent1 resolven?
Om de parent child relatie weer te geven misschien? ;)
WHERE parent <> 0 gebruik ik om de parents zelf niet in het resultaat weer te geven.


PS tr is gemaakt enige tijd terug ..

  • lier
  • Registratie: Januari 2004
  • Nu online

lier

MikroTik nerd

Als de inner join (inderdaad) mag:

code:
1
2
3
4
SELECT c.name, p.name
FROM test c
INNER JOIN test p
ON c.parent = p.id

Eerst het probleem, dan de oplossing


  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 14-02 13:01
lier schreef op donderdag 13 juli 2006 @ 10:36:
Als de inner join (inderdaad) mag:

code:
1
2
3
4
SELECT c.name, p.name
FROM test c
INNER JOIN test p
ON c.parent = p.id
Dank je _/-\o_
Ik zat dus werkelijk te zoeken hoe ik dat met een subquery kon oplossen , nooit aan een innerjoin gedacht :) ..

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
SQL:
1
2
3
SELECT c.name, p.name
FROM test AS c, test AS p
WHERE c.parent = p.id

Weet niet of dit sneller gaat dan een join bij MySQL.

  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 14-02 13:01
moozzuzz schreef op donderdag 13 juli 2006 @ 11:47:
SQL:
1
2
3
SELECT c.name, p.name
FROM test AS c, test AS p
WHERE c.parent = p.id

Weet niet of dit sneller gaat dan een join bij MySQL.
Dit is nog makkelijker. Op een of andere manier vind ik het gebruik van joins lastig. Ik probeer ze altijd te vermijden. Dat is me tot nu toe altijd gelukt. :)

En dankzij jullie hulp nu dus weer :D

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Dit is toch 'gewoon' een impliciete join :?

  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 14-02 13:01
TheRookie schreef op donderdag 13 juli 2006 @ 11:57:
Dit is toch 'gewoon' een impliciete join :?
Het is wel een join , maar dan zonder de commando's inner join , left right join etc..

Op een of andere manier maken queries voor mij meer duidelijk als bovenstaande commando's niet worden gebruikt. Dat is vast mijn gebrek aan degelijke sql kennis , maar ach.. ik hoef er mijn brood niet mee te verdienen .. alleen wat hobbie gepruts..

  • lier
  • Registratie: Januari 2004
  • Nu online

lier

MikroTik nerd

om3ega schreef op donderdag 13 juli 2006 @ 11:59:
[...]


Het is wel een join , maar dan zonder de commando's inner join , left right join etc..

Op een of andere manier maken queries voor mij meer duidelijk als bovenstaande commando's niet worden gebruikt. Dat is vast mijn gebrek aan degelijke sql kennis , maar ach.. ik hoef er mijn brood niet mee te verdienen .. alleen wat hobbie gepruts..
Mijn leraar zei altijd: "dubbel fout is niet goed..."

Eerst het probleem, dan de oplossing


  • om3ega
  • Registratie: Maart 2001
  • Laatst online: 14-02 13:01
lier schreef op donderdag 13 juli 2006 @ 12:05:
Mijn leraar zei altijd: "dubbel fout is niet goed..."
Ik zeg altijd : het is het resultaat wat telt B)

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Ik verplaats je topic even, maar voor de volledigheid. Dit is wel redelijk basic SQL. Wellicht dat er wat uit de discussie komt ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
TheRookie schreef op donderdag 13 juli 2006 @ 11:57:
Dit is toch 'gewoon' een impliciete join :?
Jep,

maar nu we het er even over hebben, weet iemand of MySQL dit sneller/trager/anders afhandelt dan als men de JOIN-syntax gebruikt?

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

moozzuzz schreef op donderdag 13 juli 2006 @ 13:35:
maar nu we het er even over hebben, weet iemand of MySQL dit sneller/trager/anders afhandelt dan als men de JOIN-syntax gebruikt?
Ik gok dat het in de query optimizer wordt afgehandeld, en dus geen significant effect heeft.

Rustacean


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ik geef wel de voorkeur aan de 'INNER JOIN' achtige syntax. Zo hou je join criteria en filter criteria (WHERE statement) mooi uit elkaar.

Qua snelheid zal het inderdaad niet uitmaken, maar als je dat zelf zou willen controleren is de beste manier even het executieplan te bekijken (EXPLAIN in MySQL geloof ik).

Overigens, de oplossing met een self join die hier gegeven is geeft alleen children , geen granchildren etc weer. Ik weet niet of dat een probleem is, maar ik denk ik zeg het nog maar even.

Oops! Google Chrome could not find www.rijks%20museum.nl

Pagina: 1