[MSSQL] View, mergen van 2 tabellen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 14-09 08:54
Tweakers,

Het volgende :

Ik heb 2 tabellen, elk een gebruikerstabel maar elk met verschillende kolommen. Nu wil ik graag een view maken die het geheel combineert. Dus username uit tabel 1, moet in dezelfde kolom komen als loginnaam uit tabel 2.

code:
1
2
Tabel 1:
id,tabel2_id,username,password etc etc

code:
1
2
Tabel 2: 
id,loginnaam,wachtwoord etc etc

Tabel 1 bevat naast zijn eigen gebruikers.. ook rijen met geen gegevens maar wel een tabel_2 id

Nu wil ik dat de view er zo uit komt te zien:
code:
1
 tabel1.id,tabel2.id (kan 0 zijn),username,password


Voorbeeldje
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Tabel1:
ID  tabel2_id  username  password
1     0            henkie      mijnw8woord
2     1            NULL        NULL

Tabel 2:
ID loginnaam      wachtwoord
1  koosje            koosie

View:
ID  tabel2_id  username  password
1        0          henkie      mijnw8woord
2        1          koosje      koosie


Nu ben ik al dit tegen gekomen:

code:
1
2
3
4
case when tabel1.tabel2_id<>0
    then tabel2.loginnaam
   else tabel1.username
  end AS username


Maar het gaat om een kolom of 15, dus 15 if statements lijkt me een beetje overdreven, kan dit niet anders??

Alvast bedankt

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:15

Janoz

Moderator Devschuur®

!litemod

Is tabel2_id altijd 0 wanneer er geen bijbehorend item in tabel 2 zit? (en zo ja, waarom is dat 0 en geen null?)

Maar goed, een mogelijke aanpak is een union. Voor het ene deel van de union selecteer je alles uit tabel 2 en join je de gegevens met tabel 1 (om de tabel 1 id te krijgen). Het andere deel van de union is gewoon alles uit tabel 1 waarbij tabel2_id 0 is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • d00d
  • Registratie: September 2003
  • Laatst online: 16-09 13:23

d00d

geen matches

Je kunt hiervoor het beste 'coalesce' gebruiken. Je mag zelf even opzoeken wat deze functie doet.
De query wordt dan:
SQL:
1
2
3
4
5
select t1.ID,
    coalesce(t1.username, t2.loginnaam, 'n/a') as username,
    coalesce(t1.password, t2.wachtwoord, 'n/a') as password
from Tabel1 t1
    left outer join Tabel2 t2 on t1.tabel2_id = t2.ID

42.7 percent of all statistics are made up on the spot.


Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 14-09 08:54
Dat is inderdaad PRECIES wat ik wil! SUPER!

Voor de mensen die te beroerd zijn om te zoeken coalesec doet:

te vergelijke met diezelfde ifstatement: pak de waarde van het eerste veld, is die null, pak dan de waarde 2.. (en zo kan je nog veel meer waardes afgaan).

http://msdn.microsoft.com/en-us/library/ms190349.aspx