Dubbele left join

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • reddevil001
  • Registratie: Januari 2002
  • Laatst online: 12-09 14:18
Ik probeer twee tabellen aan elkaar te knopen met een left join.

Ik wil altijd de gegevens uit table1 tonen. Als table1.id = table2.FK_id1 en table2.FK_id2 = 20 is, dan wil ik de gegevens uit table2 ook tonen. Dit kan natuurlijk in 2 queries, maar dat kan vast ook in 1 query.
Ik kom op onderstaande query, maar die werkt niet.

SQL:
1
2
3
SELECT id FROM table1 
    LEFT JOIN table2 ON (table1.id = table2.FK_id1) 
    LEFT JOIN table2 ON (20 = table2.FK_id2)


of

SQL:
1
2
SELECT id FROM table1 
    LEFT JOIN table2 ON (table1.id = table2.FK_id1AND 20 = table2.FK_id2)


De eerste geeft het probleem dat er twee keer table2 gebruikt wordt en de tweede kan natuurlijk niet omdat er anders geen LEFT join meer kan zijn.

Ik heb uiteraard meer dan voldoende informatie kunnen vinden over left join's. Weet iemand hoe ik deze query vorm moet geven en/of waar ik meer informatie kan vinden?

[ Voor 17% gewijzigd door reddevil001 op 21-09-2010 14:13 ]

None


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
SQL:
1
2
SELECT id FROM table1 
    LEFT JOIN table2 (table1.id = table2.FK_id1) AND (20 = table2.FK_id2)

:?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Moet dat niet gewoon met een where na de join

WHERE (table2.FK_ID2 = 20)

Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Nu online

Dido

heforshe

RobIII schreef op dinsdag 21 september 2010 @ 14:12:
SQL:
1
2
SELECT id FROM table1 
    LEFT JOIN table2 (table1.id = table2.FK_id1) OR (20 = table2.FK_id2)

:?
Dan krijg je hele grappige resultaten , denk ik. Ik vermoed dat je voor elkse FK_id2 in table2 alle records in table1 terugkrijgt...

edit: er stond "OR"!!! :(

ontopic: ik vroeg me ook meteen af wat er mis is met een WHERE... of ik begrijp de vraag niet.

[ Voor 14% gewijzigd door Dido op 21-09-2010 14:28 ]

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
O-)
Dat had ik ook een beetje...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Dido schreef op dinsdag 21 september 2010 @ 14:27:
ontopic: ik vroeg me ook meteen af wat er mis is met een WHERE... of ik begrijp de vraag niet.
Je wilt altijd de records uit table1 tonen, en niet rijen daarvan uitsluiten wat WHERE normaal gesproken doet. Maar het gekke is natuurlijk dat het antwoord al in de TS staat (hoewel er een spatie voor AND ontbreekt). :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • reddevil001
  • Registratie: Januari 2002
  • Laatst online: 12-09 14:18
Klopt het is de query met de AND geworden.

De tweede query werkte niet omdat daar geen haakjes in stonden.

SQL:
1
2
SELECT id FROM table1 
    LEFT JOIN table2 ON (table1.id = table2.FK_id1 AND 20 = table2.FK_id2)


De bovenstaande is FOUT het onderstaande is JUIST.

SQL:
1
2
SELECT id FROM table1 
    LEFT JOIN table2 ON (table1.id = table2.FK_id1) AND (20 = table2.FK_id2)

[ Voor 69% gewijzigd door reddevil001 op 21-09-2010 14:49 ]

None


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12-09 23:07
reddevil001 schreef op dinsdag 21 september 2010 @ 14:10:
Ik probeer twee tabellen aan elkaar te knopen met een left join.

Ik wil altijd de gegevens uit table1 tonen. Als table1.id = table2.FK_id1 en table2.FK_id2 = 20 is, dan wil ik de gegevens uit table2 ook tonen. Dit kan natuurlijk in 2 queries, maar dat kan vast ook in 1 query.
Ik kom op onderstaande query, maar die werkt niet.

SQL:
1
2
3
SELECT id FROM table1 
    LEFT JOIN table2 ON (table1.id = table2.FK_id1) 
    LEFT JOIN table2 ON (20 = table2.FK_id2)
Over welk dbms spreken we hier trouwens ?
De enige DB die ik ken, die haakjes vereist in de from & join clauses is access.

[ Voor 16% gewijzigd door whoami op 21-09-2010 14:52 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Het lijkt erop dat niet die haakjes vereist zijn maar dat de operator precedence niet helemaal goed in elkaar zit als (a = x) AND (b = y) iets anders oplevert dan (a = x AND b = y). :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik gok ook dat de TS iets verkeerds heeft gedaan, want beide queries zouden gewoon naar behoren moeten werken (en doen dat ook in bv. MySQL)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
nouja, je zou kunnen denken dat het geinterpreteerd wordt als table2.FK_id1 AND 20 natuurlijk. Sowieso vindt ik het omdraaien van de condities (20 = x ipv x = 20) wat apart in de context van sql.

Puur uit nieuwsgierigheid, wat krijg je als je

SQL:
1
LEFT JOIN table2 ON table1.id = table2.FK_id1 AND table2.FK_id2 = 20


doet?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

YopY schreef op dinsdag 21 september 2010 @ 15:21:
nouja, je zou kunnen denken dat het geinterpreteerd wordt als table2.FK_id1 AND 20 natuurlijk.
Welk idioot dmbs stelt dat de AND belangrijker is dan de =? En sowieso klopt de query dan niet, want volgens mij kun je in SQL niet zeggen: a = b = c
.edit: oh natuurlijk wel, a = b is een boolean, het resultaat kun je weer vergelijken met c.

[ Voor 25% gewijzigd door .oisyn op 21-09-2010 15:27 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1