[MSSQL] 2 Tabellen joinen en waardes combineren *

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Goedemiddag tweakers,

Ik heb het volgende probleem. Ik heb in mijn applicatie 2 soorten gebruikers. Bij type gebruiker 1, worden gegevens zoals voornaam,achternaam etc opgeslagen in tabel1. Voor gebruikers met het type 2, worden dat soort gegevens in tabel2 opgeslagen. Tabel 2 bevat ook nog een kolom: tabel1_id, waar het id in staat van de 1e tabel indien het een gebruiker is van type 1. Dit ziet er dus zo uit:

code:
1
2
3
Tabel 1
ID            voornaam             achternaam
1             piet                      puk

code:
1
2
3
4
5
Tabel 2
ID           tabel1_id              voornaam            achternaam
1                  0                      klaas                  klaasen
2                  1                                                
3                  0                      henkie                 stubbe

Nu wil ik graag een view maken die de gegevens combineert, en op de plek waar tabel1_id geen 0 is, de gegevens van tabel 1 pakt en anders de gegevens van tabel 2

Dus dat het er zo uit komt te zien
code:
1
2
3
4
ID              voornaam             achternaam
1                klaas                  klaasen
2                piet                     puk
3               henkie                 stubbe


Is dit mogelijk? En hoe moet ik dit doen? Ik had al wat gezocht op if statements en op een union, maar ik kom er niet echt uit. Kan een wijze tweaker, mij een handje op weg helpen?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
SQL:
1
2
3
select foo, bar, case when bla1.veld = 0 then bla2.veld else bla1.veld end as foobar
from bla1 ...
left outer join bla2 ...


Maarre, wélke SQL DB hebben we het hier over :?

En wat meneer wijsneus hieronder zegt :+

Edit: Ah ik had de vraag verkeerd begrepen. Dan negeer bovenstaande code maar...

[ Voor 51% gewijzigd door RobIII op 23-03-2009 17:03 ]

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!

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

NMe

Quia Ego Sic Dico.

Wat begrijp je precies niet aan een union waardoor het niet lukt? Wat is de query die je geprobeerd hebt? Geef eens wat meer info. ;)

Verder: dit ruikt wel heel erg naar een slecht datamodel. Als een user meerdere types kan hebben dan ga je toch niet voor elk type een andere tabel maken? :?

'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!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
NMe schreef op maandag 23 maart 2009 @ 16:28:
Verder: dit ruikt wel heel erg naar een slecht datamodel. Als een user meerdere types kan hebben dan ga je toch niet voor elk type een andere tabel maken? :?
Dat moet je wel een beetje nuanceren; soms wel en soms niet. Als de entiteiten feitelijk hetzelfde zijn op het type na dan is het onzin om aparte tabellen te maken, maar als het daadwerkelijk verschillende entiteiten zijn met verschillende gegevens dan maak je natuurlijk ook verschillende tabellen. Ik haal in ieder geval niet helemaal goed uit de TS wat nu precies de situatie is.

[ Voor 6% gewijzigd door RobIII op 23-03-2009 16:32 ]

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!

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

NMe

Quia Ego Sic Dico.

RobIII schreef op maandag 23 maart 2009 @ 16:31:
[...]

Dat moet je wel een beetje nuanceren; soms wel en soms niet. Als de entiteiten feitelijk hetzelfde zijn op het type na dan is het onzin om aparte tabellen te maken, maar als het daadwerkelijk verschillende entiteiten zijn met verschillende gegevens dan maak je natuurlijk ook verschillende tabellen.
Ik lees iets over gebruikers met verschillende types. Dat kan best natuurlijk, maar dan neem je toch alle gemeenschappelijke data in één tabel op, en alle type-specifieke data in een andere waar je daarna op joint? :)

'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!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Bij een union kwam eerst de lege regel en daarna de volle regel van de andere tabel. Ik kreeg dus 2 regels en dit wilde ik niet

Mijn query was zoiets als :
code:
1
2
3
SELECT * FROM tabel1
UNION
SELECT * FROM tabel2


Stom, vergeten te vermelden: MSSQL

En verder: Ik was al bang dat jullie hierover een opmerking zouden plaatsen, op zich heb je gelijk alleen niet in deze situatie. De 1e tabel is eigenlijk een view, die view komt van een andere tabel in een andere database. Er maken twee applicaties gebruik van die tabel, want je kan met dezelfde inloggegevens inloggen op beiden applicaties. Echter kunnen ook andere gebruikersgroepen op mijn applicatie inloggen dan de groep mensen die allemaal uit die view komen. (snap je hem nog?)

[ Voor 26% gewijzigd door BlackHawkDesign op 23-03-2009 16:42 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
NMe schreef op maandag 23 maart 2009 @ 16:33:
[...]

Ik lees iets over gebruikers met verschillende types. Dat kan best natuurlijk, maar dan neem je toch alle gemeenschappelijke data in één tabel op, en alle type-specifieke data in een andere waar je daarna op joint? :)
Tja, misschien heeft 'ie wel drugsgebruikers en dbgebruikers. Weet ik veel.
Dan moet mijn oplossing gewoon werken.
BlackHawkDesign schreef op maandag 23 maart 2009 @ 16:38:
En verder: Ik was al bang dat jullie hierover een opmerking zouden plaatsen,
En terecht ;)
BlackHawkDesign schreef op maandag 23 maart 2009 @ 16:38:
De 1e tabel is eigenlijk een view, die view komt van een andere tabel in een andere database. 2 verschillende applicaties (waarvan de 1 zoveel mogelijk toegang wordt beperkt en dus geen vrije internet applicatie is en de andere, die van mij, dat juist wel is) delen samen een gebruikerstabel.
Kijk, dat verklaart al een hoop. Als je voortaan nou dat soort info even vermeldt in je topicstart dan hoeven wij niet allemaal onnodige moeite in dat soort geneuzel te steken ;)

[ Voor 58% gewijzigd door RobIII op 23-03-2009 16:41 ]

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!

  • humbug
  • Registratie: Augustus 2006
  • Laatst online: 23-08 00:13
Dus iets als

code:
1
2
3
4
5
Select ID , voornaam, achternaam from tabel2 where tabel1_id<>0

union all

select ID, voornaam, achternaam from tabel1


Misschien een beetje rommelen met veldtypes (chars van verschillende lengtes e.d.) maar niet ondoenlijk.

Wij gebruiken dit soort zaken vrij vaak omdat wij verschillende databases van verschillende leveranciers moeten samenvoegen. Dan heb je niet al te veel keuze. Dit simpele voorbeeld van BlackHawkDesign lijkt een beetje standaard school vraag, maar helaas heb je dus niet altijd de mogelijkheid om het datamodel naar eigen inzicht aan te passen.

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
EDIT: Ja humbug, dat was precies wat ik zocht! :)

Bij die van ROBlll stopte hij alles in 1 kolom, wat niet de bedoeling is. En anders moest ik voor elke kolom een if schrijven.

Die van jou werkt precies zoals ik wil.

Tweakers, thnx :) ik kan weer verder!

[ Voor 167% gewijzigd door BlackHawkDesign op 23-03-2009 17:00 ]


Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Na een dagje wat kloten loop ik toch weer een beetje vast.

De situatie is namelijk iets anders dan ik als eerste instantie heb geschetst.

Tabel 1 namelijk een view die zich bevindt op een andere server. Ik probeer dit nu voor elkaar te krijgen, echter lukt het niet. Ik probeerde eerst een server toe te voegen met s_addlinkedserver, echter moet ik daar helemaal geen inloggegevens opgeven. Hij accepteert de toevoeging wel, maar bij het opvragen van de data krijg ik de melding: provider SQLNCLI is not registered

Is het niet mogelijk zonder die server compleet open te zetten?

Acties:
  • 0 Henk 'm!

Verwijderd

Wat is s_addlinkedserver? Google kent 'm niet (en ik ook niet)...
Misschien een eigen library functie?

Acties:
  • 0 Henk 'm!

  • CHeff
  • Registratie: Oktober 2002
  • Laatst online: 19-09 23:37

CHeff

Allemaal gekkigheid

Ga er maar vanuit dat er sp_addlinkedserver bedoelt wordt ;)

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
CHeff schreef op woensdag 25 maart 2009 @ 08:32:
Ga er maar vanuit dat er sp_addlinkedserver bedoelt wordt ;)
idd, die bedoelde ik

[ Voor 81% gewijzigd door BlackHawkDesign op 25-03-2009 09:15 ]

Pagina: 1