[MSSQL] Join tussen integer en nvarchar velden

Pagina: 1
Acties:

  • barteke
  • Registratie: September 2002
  • Laatst online: 25-06-2023
Goedendag,

Ik heb twee tabellen waartussen ik een relatie wil leggen in m'n query.

Het probleem is nu echter niet zozeer dat de velden waarop de relatie gelegd moet worden verschillend zijn (int(4) - een uniek ID en nvarchar(512)), maar wel dat dat ene nvarchar veld meerdere "id's" kan bevatten die ook in de andere tabel voorkomen.

[10][3] is een voorbeeld van wat kan voorkomen in het nvarchar veld. Dit zijn dus de unieke ID's 10 en 3 die zich in de andere tabel in het veld int4) bevinden.

Mijn vraag is nu of het toch op de een of andere manier mogelijk is een relatie tussen deze twee velden te leggen in de query zelf. Tot nu toe heb ik geen bevredigend resultaat kunnen boeken helaas..

groeten,

Bart

I am a rock, I am an Island, and a rock feels no pain and an Island never cries


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:16
Ik denk weet zeker dat je je database eens moet re-designen....

Een één op meer relatie (of een n-m relatie in jouw geval) geef je niet weer door verschillende id's in één veld te gaan stoppen (gescheiden door komma's of whatsoever).

Lees eens een paar documenten / tutorials over normalisatie en database ontwerp.

Een 1-n relatie leg je vast door voor ieder item dat gekoppeld is aan het hoofdrecord, een record te maken in je gerelateerde tabel.

Een n-m relatie (en dat is wat je wil), leg je vast dmv een koppeltabel.
Ipv 2 tabellen, heb je dan dus 3 tabellen, waarbij die nieuwe tabel enkel dient om de 'relatie' te leggen tussen de records in tabel A en tabel B. In die 'koppeltabel', kan je ook nog gegevens kwijt die relevant zijn tot die relatie.

[ Voor 45% gewijzigd door whoami op 16-11-2005 09:26 ]

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Dit is een zeer slecht database ontwerp. De enige juiste oplossing is om dit te veranderen. Je kunt het beste een koppeltabel toevoegen. Deze tabel kan in principe bestaan uit 2 kolommen, nl. de beide id's van de te koppelen tabellen.

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


  • EfBe
  • Registratie: Januari 2000
  • Niet online
doe jezelf een lol en wijzig die verschrikkelijke setup met die nvarchar en normaliseer het uit, het is op dit moment onwerkbaar en leidt alleen maar tot (nog meer) knoeiwerk.

(edit) haha binnen 3 seconden 3 man: "REDESIGNEN!!"

[ Voor 14% gewijzigd door EfBe op 16-11-2005 09:26 ]

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


Verwijderd

barteke schreef op woensdag 16 november 2005 @ 09:21:
Goedendag,

Ik heb twee tabellen waartussen ik een relatie wil leggen in m'n query.

Het probleem is nu echter niet zozeer dat de velden waarop de relatie gelegd moet worden verschillend zijn (int(4) - een uniek ID en nvarchar(512)), maar wel dat dat ene nvarchar veld meerdere "id's" kan bevatten die ook in de andere tabel voorkomen.

[10][3] is een voorbeeld van wat kan voorkomen in het nvarchar veld. Dit zijn dus de unieke ID's 10 en 3 die zich in de andere tabel in het veld int4) bevinden.

Mijn vraag is nu of het toch op de een of andere manier mogelijk is een relatie tussen deze twee velden te leggen in de query zelf. Tot nu toe heb ik geen bevredigend resultaat kunnen boeken helaas..

groeten,

Bart
Hmm...geef je database relaties eens weer...en welke id's met welke verbonden moeten worden in dite tabellen spuit 11. Maar doe het toch maar ;)

[ Voor 5% gewijzigd door Verwijderd op 16-11-2005 09:28 ]


  • barteke
  • Registratie: September 2002
  • Laatst online: 25-06-2023
Hoi, dank voor de snelle reacties.

Jullie hebben allemaal gelijk,maar ik wil er toch ff bijzeggen dat het NIET mijn dbase design is. Ik heb eigenlijk weinig keus dan hier mee te werken. Door de applicatie die gebruik maakt van de betreffende database zit ik min of meer vast aan een bepaalde vastgelegde structuur.

Ik kan het in principe wel aanpassen, maar daar is dus heel wat werk mee gepaard, ik heb tegen beter weten in gehoopt dat het ook sneller zou kunnen.

Het gaat enkel om twee tabellen in dit geval. Deelnemer(met veld ID int(4)) en Actie(Veld nvarchar). Een actie opgeslagen in de Actietabel kan meerdere deelnemers bevatten, dit wordt dus bewerkstelligd door meerder DeelnemerID's uit tabel deelnemer te plaatsen in het nvarcharveld van tabel Actie, op deze manier [10][3][25] enz. Dit werkt op zich goed voor de hoofdapplicatie, maar als je zelf customqueries wilt samenstellen kom je dus in de problemen met het leggen van relaties tussen deze tabellen.

I am a rock, I am an Island, and a rock feels no pain and an Island never cries


  • J27
  • Registratie: Januari 2003
  • Laatst online: 21:44

J27

Ondanks dat ik de bovenstaande posters gelijk moet geven, zijn er momenten dat ik dit toch gebruik hebt in het verleden. Onderstaand voorbeeldje is dan ook bedoeld voor als je met een legacy database werkt waarin je het ontwerp niet zomaar kan of mag aanpassen.

Table1 > id, name
Table2 > id, name, Table1Ids

code:
1
2
3
select *
from table1 t1, table2 t2
where CHARINDEX('['+cast(t1.id as varchar)+']', t2.table1ids)>0


Ik hoop dat je hier dus niets aan heb, en gewoon de db wat beter opzet :)

Edit: nu ik je bovenstaande post zie blijkt dat dit je misschien toch kan helpen...

[ Voor 17% gewijzigd door J27 op 16-11-2005 09:46 ]


  • barteke
  • Registratie: September 2002
  • Laatst online: 25-06-2023
Nou, daar heb ik dus wel wat aan ja. :-)

Hartelijk dank!

I am a rock, I am an Island, and a rock feels no pain and an Island never cries


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:16
Als je kan, dan zou ik het datamodel toch veranderen....
Het zal nu veel werk zijn, maar het bespaart je van allerhande ellende in de toekomst.

https://fgheysels.github.io/

Pagina: 1