Toon posts:

[sql] access begrijpt geen full outer join?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil van 3 tabellen enkel de rijen hebben waarbij de id 2 is. Onder SQL Server doe ik dit:

SELECT Table1.naam_1, Table2.naam_2, Table3.naam_3
INTO Bla
FROM (Table1 full outer JOIN Table2 ON Table1.id = Table2.id) full outer JOIN Table3 ON Table1.id = Table3.id
where table1.id=2 or table2.id = 2 or table3.id = 2

Mijn probleem is echter dat mijn programma Access gebruikt en die snapt hier niets van!
Loop ik nu tegen een sql dialect aan of kan Access dit gewoon niet?
Nu schrijf ik maar wat code welke de velden van Bla vult, maar 'netjes' is het niet.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Access geeft meestal ook wel aan wat hij niet snapt en waar hij dat niet snapt.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Database freak
  • Registratie: Oktober 1999
  • Laatst online: 21-01 12:56
klopt access kan dit niet. Waarom upgrade je access niet naar de MSDA / .ACS-file bestand kan je SQL Server views direct copieren zonder vertaal slag?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Een union? Volgens mij werkt dit wel met access:
SELECT * FROM table LEFT OUTER JOIN [...]
UNION
SELECT * FROM table RIGHT OUTER JOIN [...]

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


  • EfBe
  • Registratie: Januari 2000
  • Niet online
yup, union gebruiken. Gaat wel lekker performen btw :D

Btw, die query klopt van geen kant. Je gaat joinen via een ID field waar je ook een where predicate op los laat met een or. Dit zou dan ook moeten werken volgens mij:

code:
1
2
3
4
5
6
7
8
SELECT  Table1.naam_1, Table2.naam_2, Table3.naam_3
INTO    Bla
FROM    (Table1 INNER JOIN Table2 
     ON Table1.id = Table2.id
     AND Table1.id=2)
    INNER JOIN Table3 ON 
    Table1.id = Table3.id
    AND Table1.id=2

Immers, Table1.ID is altijd gelijk aan Table2.id. Als id van table1 of table2 altijd 2 moet zijn, is table1.id altijd 2, no matter what. Table1 is leading in jouw query dus kun je inner join gebruiken.

[ Voor 88% gewijzigd door EfBe op 22-08-2003 13:52 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Een union maakt meerdere records aan. Ik wil 1 record omdat ik hier crystal reports op los laat. Upgraden naar MSDE vind ik nogal overkill, ik verwacht niet dat er meer dan 5 records in een tabel komen.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op 22 August 2003 @ 13:41:
Een union maakt meerdere records aan..
Wat bedoel je precies? Dubbele resultaten? Volgens mij elimineert een UNION automatisch duplicaten (tenminste in SQL Server wel)

Iets meer duidelijkheid graag.

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


  • EfBe
  • Registratie: Januari 2000
  • Niet online
P_de_B schreef op 22 August 2003 @ 13:48:
[...]
Wat bedoel je precies? Dubbele resultaten? Volgens mij elimineert een UNION automatisch duplicaten (tenminste in SQL Server wel)
Iets meer duidelijkheid graag.
Bij nader inzien kan een union inderdaad niet, want hij wil een resultset met 3 columns gehaald uit 3 tables. Een union zou altijd max 2 tables gebruiken (1 en 2, en 2 en 3).

Echter die innerjoin query die ik postte moet ook werken.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
EfBe schreef op 22 August 2003 @ 13:52:
[...]

Bij nader inzien kan een union inderdaad niet, want hij wil een resultset met 3 columns gehaald uit 3 tables. Een union zou altijd max 2 tables gebruiken (1 en 2, en 2 en 3).

Echter die innerjoin query die ik postte moet ook werken.
Je hebt gelijk. Ik had niet de SELECT list gelezen....

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


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
SELECT  Table1.naam_1, Table2.naam_2, Table3.naam_3
INTO    Bla
FROM    (Table1 INNER JOIN Table2 
     ON Table1.id = Table2.id
     AND Table1.id=2)
    INNER JOIN Table3 ON 
    Table1.id = Table3.id
    AND Table1.id=2
Immers, Table1.ID is altijd gelijk aan Table2.id. Als id van table1 of table2 altijd 2 moet zijn, is table1.id altijd 2, no matter what. Table1 is leading in jouw query dus kun je inner join gebruiken.
Daar zit ook het probleem, ik weet niet of die Table1.id met waarde 2 wel bestaat. Een oplossing is 3 queries maken waarbij table1.id of table2.id of table3.id leading is. Dan kijk ik wie van de 3 tabellen een id 2 heeft en laat dan de juiste query erop los. Dat werkt, maar netjes is anders. Het liefst heb ik dus 1 query die mij van alle 3 de tabellen de velden weergeeft als id 2 is. Met een full outer join lukt dat.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op 22 August 2003 @ 22:10:
Daar zit ook het probleem, ik weet niet of die Table1.id met waarde 2 wel bestaat. Een oplossing is 3 queries maken waarbij table1.id of table2.id of table3.id leading is. Dan kijk ik wie van de 3 tabellen een id 2 heeft en laat dan de juiste query erop los. Dat werkt, maar netjes is anders. Het liefst heb ik dus 1 query die mij van alle 3 de tabellen de velden weergeeft als id 2 is. Met een full outer join lukt dat.
Dat boeit toch niet of table1's id=2 wel bestaat? Als hij niet bestaat levert dat geen row op, en in je oude query in de topic start ook niet.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Als table1 id 2 niet bestaat geeft ie nooit een row, ik wil van alle tables de waarde als er een id 2 is. Als er geen id 2 moet ie een NULL waarde teruggeven. Met de full outer join geeft ie tenminste een row terug als table 2 of table 3 een id 2 hebben.
Misschien was ik niet duidelijk genoeg.
Pagina: 1