LEFT JOIN query werkt niet in Access

Status
Niet open voor verdere reacties.

Langnek723

Gebruiker
Lid geworden
11 mei 2010
Berichten
12
Met 1 left join heeft access geen moeite.

SELECT record.shelfmark, record.creator, record.title, record.publisher, record.year, record.dimension, record.technique, subject.subject, record.relatedNAmes, record.note, record.reference
FROM record LEFT JOIN subject ON subject.subject_id=record.subject
ORDER BY record.shelfmark;

Bij deze (dus meerdere tabellen) krijg ik een error.

SELECT record.shelfmark, record.creator, record.title, publisher.publisher, record.year, record.dimension, record.technique, subject.subject, record.relatedNames, record.note, record.reference
FROM record
LEFT JOIN publisher ON record.publisher=publisher.publisher_id
LEFT JOIN subject ON record.subject=subject.subject_id
ORDER BY record.shelfmark;
 
Een Left join moet altijd 'doorlopen' naar de volgende tabellen. Als je dus vanuit tabel1 een outer join naar tabel2 hebt, dan moet de join vanuit tabel2 naar tabel3 ook een outer join zijn, waarbij de 'veelkant' dus tabel3 is. Controleer dus in het ontwerpscherm van de query of de lijnen de goede kant oplopen.
 
Deze zou overigens wel moeten werken:

SELECT record.shelfmark, record.creator, record.title, publisher.publisher, record.year, record.dimension, record.technique, subject.subject AS Expr1, record.relatedNames, record.note, record.reference
FROM (record LEFT JOIN publisher ON record.Publisher = publisher.publisher_ID) LEFT JOIN Subject ON record.Subject = Subject.subject_ID
ORDER BY record.shelfmark;
 
De 1e query met 2 left joins werkt prima. De 2e query met 3 left joins werk niet. Hier krijgt ik een type mismatch in expression.
Kan het eraan liggen dat een aantal waarden in publisher leeg zijn (dus ook geen 0-waarde zoals bv. subject wel heeft)??


SELECT record.shelfmark, record.creator, record.title, record.publisher, record.year, record.dimension, technique.technique, subject.subject, record.relatedNAmes, record.note, record.reference
FROM (((record)
LEFT JOIN subject ON subject.subject_id=record.subject)
LEFT JOIN technique ON technique.technique_id=record.technique)
ORDER BY record.shelfmark;

SELECT record.shelfmark, record.creator, record.title, publisher.publisher_name, record.year, record.dimension, technique.technique, subject.subject, record.relatedNAmes, record.note, record.reference
FROM ((((record)
LEFT JOIN subject ON subject.subject_id=record.subject)
LEFT JOIN technique ON technique.technique_id=record.technique)
LEFT JOIN publisher ON publisher.publisher_id=record.publisher)
ORDER BY record.shelfmark;
 
Een type mismatch betekent meestal dat je velden aan elkaar probeert te koppelen die niet hetzelfde gegevenstype hebben. Of bijvoorbeeld wel numeriek zijn, maar veld1 is lange integer, en veld2 is decimal. Dus daar kun je nog eens naar kijken. Als een veld leeg is, zou je geen probleem hoeven te hebben. Je moet in de gerelateerde tabel wel waarden hebben staan die terugkomen in de hoofdtabel, dus daar zou ook het probleem kunnen liggen.
Kun je anders een test versie posten, als je er niet uitkomt? (bij voorkeur in 2003 format?)
 
Ja bedankt dat was het!
Publisher is een tekstveld, de andere velden werkten wel omdat deze numeriek waren.
 
Ik heb nog 1 toevoeging hieraan.

Creator en RelatedNames halen hun data uit dezelfde tabel, namelijk person.
De onderstaande query werkt niet. Ik krijg de foutmelding join expression not supported.

SELECT record.shelfmark, persons.PERSON, record.title, publisher.publisher_name, record.year, record.dimension, technique.technique, subject.subject, persons.PERSON, record.note, record.reference
FROM (((((record)
LEFT JOIN subject ON subject.subject_id=record.subject)
LEFT JOIN technique ON technique.technique_id=record.technique)
LEFT JOIN publisher ON publisher.publisher_id=record.publisher)
LEFT JOIN persons ON persons.creator_id=record.creator)
LEFT JOIN persons ON persons.creator_id=record.relatedNames)
ORDER BY record.shelfmark;
 
Ik heb het voorgaande opgelost door een 2e tabel met personen aan te maken en dan creator aan 1 en inventor aan de andere linken.

Nu krijg ik het volgende:

creator
S.f., H. (0-0)
, (-)
, (-)
, (-)
, (-)
, (-)

De bovenste is goed. De andere zijn 0-waarden. Doordat de waarde voor creator uit een samenvoegquery komt (last_name, first_name, date_of_birth, date_of_death) worden de 0 waardes zo neergezet.
Ik wil op de plek van de 0-waardes lege vakjes en geen , (-)

Kan ik het toevoegen aan deze left join query of moet ik daarvoor een nieuwe query maken?

SELECT record.shelfmark, persons.PERSON AS creator, record.title, publisher.publisher_name, record.year, record.dimension, technique.technique, subject.subject, persons2.PERSON AS inventor, record.note, record.reference
FROM ((((((record)
LEFT JOIN subject ON subject.subject_id=record.subject)
LEFT JOIN technique ON technique.technique_id=record.technique)
LEFT JOIN publisher ON publisher.publisher_id=record.publisher)
LEFT JOIN persons ON persons.creator_id=record.creator)
LEFT JOIN persons2 ON persons2.creator_id=record.relatedNames)
ORDER BY record.shelfmark;
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan