webForumDet fria alternativet

Relatera en tabell till sig själv

Databaser & SQL

5 svar · 409 visningar · startad av celia

Medlem sedan dec. 20012 532 inlägg
Frågan#1

Jag har en tabell som ser ut såhär:

[User]
UserId
Namn
CreatedBy
ModifiedBy

tex

1 | Nisse | 2 | 3
2 | Pelle | 1 | 2
3 | Kalle | 3 | 1

sen vill jag presentera data såhär:

Namn: Nisse
Skapad av: Pelle
Ändrad av: Kalle

dvs ersätta id med respektive namn. Hur ska man göra det? Finns det ett bättre sätt att bygga upp databasen?

Medlem sedan dec. 1999707 inlägg
#2

SELECT
u.Namn,
c.Namn AS CreateUser,
m.Namn AS ModifyUser
FROM
User u
LEFT OUTER JOIN
User c
ON
u.CreatedBy = c.UserId
LEFT OUTER JOIN
User m
ON
u.ModifiedBy = m.UserId

Medlem sedan juli 20011 129 inlägg
#3

Generell fråga. Blir det samma resultat om man kör en

Select u.Namn, c.Namn as CreateUser, m.Namn as ModifyUser 
From User u, User c, User m 
Where u.CreatedBy = c.UserID And u.ModifiedBy = m.UserID

Jag kör alltid where's istället för Joins. Men frågan är om det fungerar i alla lägen, därför är jag inte säker på att den fungerar här.

Medlem sedan juni 200032 967 inlägg
#4

Det är ekvivalent. Men kom ihåg, det blir alltid en inner join, eftersom du använder =.

I detta fall bör du alltså skriva med JOIN-syntax.

Edit: Man kan även använda *= och =* för att specificera outer joins, men jag är inte säker på att alla dbms stödjer detta.

Medlem sedan dec. 20012 532 inlägg
#5

Tack, fungerar fint :)

Medlem sedan dec. 1999707 inlägg
#6

Vet inte vad joins med = och =* i WHERE-satsen heter men jag tror någon sa att ansi-sql-joins (inner join, left outer join etc) var snabbare/bättre att använda. Jag tycker iaf det är lättare att jobba med. :)

253 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)