[SQL] 2 dezelfde velden samen voegen uit 2 records

Pagina: 1
Acties:
  • 149 views sinds 30-01-2008
  • Reageer

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Stel je hebt een tabel (tabel1):
code:
1
2
3
4
5
6
-----------------
| ID | Naam     |
-----------------
| 1  | Record1  |
| 2  | Record2  |
-----------------

en nog een tabel (tabel2):
code:
1
2
3
4
5
------------------------------
| ID | Record1ID | Record2ID |
------------------------------
| 1  | 1         | 2         |
------------------------------

Nu wil ik de naam van beide records selecteren via de ID verkregen uit het record in de tweede tabel. Is dat mogelijk? Of moet ik dit via twee queries doen?

Ik zat zelf al te denken in de richting van:

code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT 
    tabel1.Naam AS naam1, 
    tabel1.Naam AS naam2 
FROM 
    tabel1, 
    tabel2 
WHERE  
    tabel1.ID = tabel2.Record1ID 
AND 
    tabel1.ID = tabel2.Record2ID 
AND 
    tabel2.ID = 1


maar dat slaat natuurlijk nergens op. Ik zou dan zowiezo nooit kunnen weten welke naam nu welke is als het al zou werken. Iemand een suggestie?

edit:

ff sql stukje aangepast, klopte niet echt, sry

[ Voor 16% gewijzigd door Michali op 10-04-2004 15:01 ]

Noushka's Magnificent Dream | Unity


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19:24
De basis:
SQL:
1
2
3
4
SELECT tabel1.naam 
FROM tabel1 
  INNER JOIN tabel 2 ON tabel1.id=tabel2.linkid 
WHERE tabel2.id=1


Waarom wil je eigenlijk joinen op zowel de recordid als de linkid? Dat geeft natuurlijk geen resultaat aangezien recordid en linkid 2 verschillende getallen zijn.

Geef je velden verder eens redelijke namen, want linkid en record id zeggen niets meer als je over vele kolommen gaat joinen. Het zou dan ook handig zijn dat je even aangeeft wat de gegevens zijn en wat ze met elkaar te maken hebben, oftwel hun relatie met elkaar.

[ Voor 98% gewijzigd door djluc op 10-04-2004 14:56 ]


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Wat ik wil is dus de naam van de record uit tabel1 met ID die gelijk is aan RecordID en de naam van de record uit tabel1 met ID die gelijk is aan LinkID. En die RecordID en LinkID komen dus uit tabel2.
Geef je velden verder eens redelijke namen, want linkid en record id zeggen niets meer als je over vele kolommen gaat joinen. Het zou dan ook handig zijn dat je even aangeeft wat de gegevens zijn en wat ze met elkaar te maken hebben, oftwel hun relatie met elkaar.
Die veld namen doen er even niet toe. Dit is niet hoe de werkelijke tabellen er uit zien, maar het princiepe is precies het zelfde.

[ Voor 52% gewijzigd door Michali op 10-04-2004 14:59 ]

Noushka's Magnificent Dream | Unity


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19:24
Misschien kun je gewoon in plaats van AND dan OR gebruiken in je eerste query? Er is namelijk geen enkel record die voldoet aan beide voorwaarden.

  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

Mag je subselects gebruiken?

code:
1
2
3
4
5
SELECT 
    (SELECT NAAM FROM TABEL1 WHERE RECORD1ID = TABEL1.ID) AS NAAM1, 
    (SELECT NAAM FROM TABEL1 WHERE RECORD2ID = TABEL1.ID) AS NAAM2
FROM TABEL2
WHERE TABEL2.ID = 1

[ Voor 6% gewijzigd door Coltrui op 10-04-2004 15:45 ]


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
Wezen schreef op 10 april 2004 @ 15:42:
Mag je subselects gebruiken?

code:
1
2
3
4
5
SELECT 
    (SELECT NAAM FROM TABEL1 WHERE RECORD1ID = TABEL1.ID) AS NAAM1, 
    (SELECT NAAM FROM TABEL1 WHERE RECORD2ID = TABEL1.ID) AS NAAM2
FROM TABEL1
WHERE TABEL1.ID = 1
Waarom subqueries :? Het kan heel makkelijk zonder... (ik schat de kant op MySQL < 4 hier redelijk groot, dus subqueries is dan onmogelijk.)


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT 
    t1.Naam AS naam1, 
    t2.Naam AS naam2 
FROM 
    tabel1 as t1, 
    tabel1 as t2,
    tabel2 
WHERE  
    t1.ID = tabel2.Record1ID 
AND 
    t2.ID = tabel2.Record2ID 
AND 
    tabel2.ID = 1


Je kunt de tabel 2 keer joinen met verschillende aliassen.
Tenminste als ik begrijp wat je bedoelt

[ Voor 42% gewijzigd door beetle71 op 10-04-2004 15:46 ]


  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

beetle71 schreef op 10 april 2004 @ 15:43:
[...]
Waarom subqueries :? Het kan heel makkelijk zonder... (ik schat de kant op MySQL < 4 hier redelijk groot, dus subqueries is dan onmogelijk.)
Omdat ik steeds werk met MSSQL en het steeds zo oplos. (Hoewel ik hier nog een tussentabel zou gebruiken, maar de TS dus niet...)

En kan je je quote ff editten? ;)

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
beetle71 schreef op 10 april 2004 @ 15:43:
[...]


Waarom subqueries :? Het kan heel makkelijk zonder... (ik schat de kant op MySQL < 4 hier redelijk groot, dus subqueries is dan onmogelijk.)


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT 
    t1.Naam AS naam1, 
    t2.Naam AS naam2 
FROM 
    tabel1 as t1, 
    tabel1 as t2,
    tabel2 
WHERE  
    t1.ID = tabel2.Record1ID 
AND 
    t2.ID = tabel2.Record2ID 
AND 
    tabel2.ID = 1


Je kunt de tabel 2 keer joinen met verschillende aliassen.
Tenminste als ik begrijp wat je bedoelt
Iemand die me begrijpt, precies wat ik zocht. Thanks.

DB is trouwens MySQL 4.018.

[ Voor 3% gewijzigd door Michali op 10-04-2004 16:20 ]

Noushka's Magnificent Dream | Unity


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19:24
Even gewoon om uit te proberen:
Wat gebeurt er als je zoals ik geschreven had, dit probeert:
Misschien kun je gewoon in plaats van AND dan OR gebruiken in je eerste query? Er is namelijk geen enkel record die voldoet aan beide voorwaarden.

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
Wezen schreef op 10 april 2004 @ 16:00:
[...]


Omdat ik steeds werk met MSSQL en het steeds zo oplos. (Hoewel ik hier nog een tussentabel zou gebruiken, maar de TS dus niet...)

En kan je je quote ff editten? ;)
Wat zou ik daar moeten editten? Ik zeg dat ik niet begrijp waarom je subqueries gebruikt, (omdat dat totaal onnodig is....) Ook begrijp ik niet waarom je een tussentabel zou gebruiken :?

Mijn inschatten voor MySQL was goed, hoewel de TS 4.018 gebruikt. Maar ook daarin zijn subqueries niet mogelijk. (pas vanaf 4.1)

Zolang je zonder kunt is het goed om als STELREGEL te gebruiken dat het zonder subquery dan ook beter is.

  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

beetle71 schreef op 10 april 2004 @ 18:14:
[...]

Wat zou ik daar moeten editten? Ik zeg dat ik niet begrijp waarom je subqueries gebruikt, (omdat dat totaal onnodig is....)
Omdat mijn code aangepast is na jouw quote. :)
Ook begrijp ik niet waarom je een tussentabel zou gebruiken :?
Stel je maar eens voor dat er in de toekomst nog een derde en een vierde ID bij komt. Handig he?
Mijn inschatten voor MySQL was goed, hoewel de TS 4.018 gebruikt. Maar ook daarin zijn subqueries niet mogelijk. (pas vanaf 4.1)
Had in de topicstart gemogen. Dan had je nu geen last gehad van mij. :P


Maar goed, probleem is afgehandeld, maar ik wou hier toch nog even op antwoorden...

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
djluc schreef op 10 april 2004 @ 17:13:
Even gewoon om uit te proberen:
Wat gebeurt er als je zoals ik geschreven had, dit probeert:
[...]
Dan krijg ik dus twee resultaten terug. En wat ik wil is juist 1 resultaat waarin 2 namen van records voor komen, namelijk van record met ID Record1ID en record met ID Record2ID.

Noushka's Magnificent Dream | Unity

Pagina: 1