Toon posts:

[SQL] outer join werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste mensen,

Hierbij nogmaals mijn vraag.
Er zat ineens een slotje op mijn vorige vraag maar ik weet niet wie dat gedaan heeft.
Degene die dat deed dacht waarschijnlijk dat het een domme vraag was met een simpele oplossing.
Ik ben inderdaad dom, maar niet zooo dom
In ieder geval werkt OUTER JOIN dus niet. Ik was vergeten erbij te vermelden dat ik dit al geprobeerd had.
Maar waarschijnlijk omdat er een selectiecriterium op de objecteigenschappentabel wordt toegepast werkt deze OUTER JOIN niet?

Dus hierbij nog eenmaal het nog steeds on-opgeloste mysterie:


Goedemiddag allemaal

Ik heb een probleem met 2 heel simpele tabelltjes waar ik met geen mogelijkheid uitkom. Ik wil namelijk een query maken die een overzichtje maakt van alle objekten in een tabel, met een kolommetje dikte en kolommetje kleur. Het probleem is hierbij dat de eigenschappen van de objecten in een andere tabel staan.

De tabellen waar het om gaat:

tblObjecten
tblObjectEigenschappen

1 object heeft meerdere eigenschappen.
In tblObjectEigenschappen komt dus voor elk object meerdere records voor

tblObjecten heeft (nu even) 1 kolom:
ObjektId

tblObjectEigenschappen heeft 3 kolommen:
ObjektId
NaamEigenschap
EigenschapWaarde


Nu wil ik een overzichtje waarin de eigenschap kleur en de eigenschap dikte wordt weergegeven

De volgende query heb ik gemaakt, maar blijkt helaas niet te werken:

SELECT ObjectId, tblObjectEigenschappen.EigenschapWaarde AS kleur, tblObjectEigenschappen_1.EigenschapWaarde AS dikte
FROM tblObject INNER JOIN
tblObjectEigenschappen ON tblObject.ObjectId =
tblObjectEigenschappen.ObjectId INNER JOIN
tblObjectEigenschappen tblObjectEigenschappen_1 ON tblObject.Id = tblObjectEigenschappen_1.ObjectId
WHERE (tblObjectEigenschappen.NaamEigenschap = "Kleur") AND
(tblObjectEigenschappen _1.NaamEigenschap = "Dikte")

Probleem is namelijk als er voor een bepaald objekt geen dikte is vastgelegd (Dus geen record met NaamEigenschap = Dikte) Laat hij het hele objekt niet zien.

Heeft iemand een tip hoe je zoiets oplost?

Bedankt

[ Voor 5% gewijzigd door Verwijderd op 12-09-2003 20:28 ]


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je hebt een extra tabel nodig met alle mogelijke eigenschappen.

Who is John Galt?


Verwijderd

Topicstarter
justmental schreef op 12 september 2003 @ 20:36:
Je hebt een extra tabel nodig met alle mogelijke eigenschappen.
Ik begrijp niet precies wat je bedoelt, maar volgens mij heb je in ieder geval altijd voor elke eigenschap die je wilt tonen een alias nodig van de tabel tblObjektEigenschappen, en probleem is dus dat ik ook altijd de eigenschap die ik nodig heb eruit moet filteren.
Als deze eigenschap niet bestaat, laat hij ook het hele objektrecord weg, ook als ik een outer join gebruik

  • nxt
  • Registratie: November 2001
  • Laatst online: 12-06 10:00

nxt

Verwijderd schreef op 12 September 2003 @ 20:44:
[...]


Ik begrijp niet precies wat je bedoelt, ....
volgens mij probeert justmental je te zeggen dat
als je objecten hebt,
en elk object heeft 0, 1 of meerdere eigenschappen
en elke eigenschap kan bij 1 of meerdere objecten horen
je dus 3 tabellen nodig hebt
1 tabel met objecten, 1 met eigenschappen, en 1 die die twee aan elkaar koppelt

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
En toch zul je een OUTER join moeten doen op tblObjectEigenschappen.

https://fgheysels.github.io/


Verwijderd

Je kan een left join gebruiken en dan in de left Join ook dit mee nemen (tblObjectEigenschappen.NaamEigenschap = "Kleur") AND
(tblObjectEigenschappen _1.NaamEigenschap = "Dikte")

zie mijn voorbeeld.
Hier heeft ook niet elke Object een Foto

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT streetname ,
o.Id,
IsNull([of].foto_filename,'nodetail.gif') as foto_fileName , 
isNull([of].foto_filename,'') as foto_fileName2,
IsNull(o.foto360,'') as foto360,
o.streetNumber, 
o.PostalCode ,
o.City ,
FROM tbObjects o WITH ( nolock )
LEFT JOIN tbObjectFotos [of] WITH (nolock) on [of].objectId = o.id and [of].foto_typeId = 2
WHERE o.Id = @p_intId

[ Voor 37% gewijzigd door Verwijderd op 13-09-2003 10:39 ]


Verwijderd

Topicstarter
nxt schreef op 12 september 2003 @ 22:34:
[...]

volgens mij probeert justmental je te zeggen dat
als je objecten hebt,
en elk object heeft 0, 1 of meerdere eigenschappen
en elke eigenschap kan bij 1 of meerdere objecten horen
je dus 3 tabellen nodig hebt
1 tabel met objecten, 1 met eigenschappen, en 1 die die twee aan elkaar koppelt
Nee, helaas als 2 objekten dezelfe eigenschap hebben *bijvoorbeeld "dikte" dan zitten er gewoon 2 records in de tblObjectEigenschappenTabel. Voor elk Objekt eentje. met eigenschapnaam "dikte" en met EigenschapWaarde de waarde en natuurlijk het objektId
Op deze manier is voor het vastleggen van de gegevens dus geen extra tabel nodig.
whoami schreef op 13 September 2003 @ 09:28:
En toch zul je een OUTER join moeten doen op tblObjectEigenschappen.
En toch heb ik het geprobeerd, en het werkt niet.
In het eerste bericht staat nog een INNER JOIN dat is idd in ieder geval fout, maar een OUTER JOIN heb ik dusook al geprobeerd, en werkt niet omdat er op elke tblObjektEigenschaoppen een filter zit die de juiste eigenschap eruit moet filteren.

Verwijderd

Verwijderd schreef op 13 September 2003 @ 10:41:
[...]


en toch heb ik het geprobeerd, en het werkt niet.
In het eerste bericht staat nog een INNER JOIN dat is idd in ieder geval fout, maar een OUTER JOIN heb ik dusook al geprobeerd, en werkt niet omdat er op elke tblObjektEigenschaoppen een filter zit die de juiste eigenschap eruit moet filteren.
probeer mijn voorbeeld eens... dat moet toch echt werken
Pagina: 1