webForumDet fria alternativet

Distinct och join en gång för alla

Databaser & SQL

6 svar · 245 visningar · startad av Method

Medlem sedan apr. 2001357 inlägg
Frågan#1

jag vill hämta alla vinstnummer i tabellen tblWinningTicket och presentera vilket lotteri vinstnummret "tillhör" och även vilken användare som har vunnit på just det lottnummret

Men problemet är lottonummret visas 3 ggr även om det bara ligger 1 post i tblWinningTicket.

har sökt på forumt och försökt att lösa det själv med group by, outer join men jag vet inte riktigt vad dom gör så vill gärna ha en förklaring till varför det blir som det blir så jag kan lära mig det och lösa liknande problem i framtiden

SELECT 

tblLottery.fld_lotID,
tblLottery.fld_lotDrawName,
tblLotRelation.fld_relLotID,
tblLotRelation.fld_relLotNumber,
tblLotRelation.fld_relUserID,
tblWinningTicket.fld_WtID,
tblWinningTicket.fld_WinTicketNumber,
tblWinningTicket.fld_LotteryID 

FROM ((tblLottery INNER JOIN tblLotRelation ON tblLottery.fld_lotID = tblLotRelation.fld_relLotID) 

INNER JOIN tblWinningTicket ON 
tblLotRelation.fld_relLotID = tblWinningTicket.fld_LotteryID) 

ORDER BY fld_WtID DESC"

I denna tabell ligger själva lotteriet
tblLottery.fld_lotID = Räknare
tblLottery.fld_lotDrawName = Text

I denna tabell sparas lottnummeren som en avändare köpt
tblLotRelation.fld_relLotID = Tal // Relationen till tblLottery
tblLotRelation.fld_relLotNumber = Tal
tblLotRelation.fld_relUserID = Tal

I denna tabell lägger man in vinstnumret och vilket lotteri det "tillhör"
tblWinningTicket.fld_WtID = Räknare
tblWinningTicket.fld_WinTicketNumber = Tal
tblWinningTicket.fld_LotteryID = Tal // Relationen till tblLottery

Tack för alla svar

Jonas

Medlem sedan dec. 200012 464 inlägg
#2

Villkoret

and tblLotRelation.fld_relLotNumber = tblWinningTicket.fld_WinTicketNumber

saknas.

Medlem sedan apr. 2001357 inlägg
#3

Tack Lars, det funkar men jag var lite otydlig på vad jag ville :r eller trött i huvudet.

men nu vet jag vad jag vill...

Nu presenteras bara vinnarnummren men jag vill kunna se alla vinstnummer som har lagts in även om det inte är någon vinnare och även att det ska stå att det inte är en vinnare.

Hoppas jag har gjort mig förstådd

Mvh

Jonas

Medlem sedan dec. 200012 464 inlägg
#4
SELECT 
tblLottery.fld_lotID,
tblLottery.fld_lotDrawName,
tblLotRelation.fld_relLotID,
tblLotRelation.fld_relLotNumber,
tblLotRelation.fld_relUserID,
tblWinningTicket.fld_WtID,
tblWinningTicket.fld_WinTicketNumber,
tblWinningTicket.fld_LotteryID 
FROM (tblLottery INNER JOIN tblWinningTicket 
ON tblLottery.fld_lotID = tblWinningTicket.fld_LotteryID) 
LEFT OUTER JOIN tblLotRelation 
ON  (tblWinningTicket.fld_LotteryID = tblLotRelation.fld_relLotID
and tblLotRelation.fld_relLotNumber = tblWinningTicket.fld_WinTicketNumber)
ORDER BY fld_WtID DESC

Om det är Access så får du kanske dona lite med parenteser.

Hur du gör när det inte finns någon vinnare beror på DBMS.

Medlem sedan apr. 2001357 inlägg
#5

Funkar utmärkt :D men jag blir tokig på mig själv nu skulle jag lägga in en till användartabellen så man kan läsa ut användarnamnet, jag hade så det fungerade innan den senaste SQL jag fick av dig nu men nu kan jag inte implementera den i koden jag har provat allt (utom det rätta)

vart i sql ska denna in och vad ska den ha för () runt sig för att funka?

(jag kör access 2000)

INNER JOIN tblUsers ON tblLotRelation.fld_relUserID = tblUsers.fld_LoginID

tack på förhand

Medlem sedan dec. 200012 464 inlägg
#6
SELECT 
tblLottery.fld_lotID,
tblLottery.fld_lotDrawName,
nz(tblUsers.userName is null, 'Ingen vinnare') as Winner,
tblWinningTicket.fld_WtID,
tblWinningTicket.fld_WinTicketNumber,
tblWinningTicket.fld_LotteryID 
FROM ((tblLottery INNER JOIN tblWinningTicket 
ON tblLottery.fld_lotID = tblWinningTicket.fld_LotteryID) 
LEFT OUTER JOIN tblLotRelation 
ON  (tblWinningTicket.fld_LotteryID = tblLotRelation.fld_relLotID
and tblLotRelation.fld_relLotNumber = tblWinningTicket.fld_WinTicketNumber))
left outer JOIN tblUsers ON tblLotRelation.fld_relUserID = tblUsers.fld_LoginID
ORDER BY fld_WtID DESC

Jag lade till en översättning om det inte fanns någon vinnare.

Medlem sedan apr. 2001357 inlägg
#7

Tusen tack

272 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)