xrobxMedlem sedan mars 2003106 inlägg Hej alla glada!
Jag kör MySQL 3.23, vilken inte har stöd för subquerys (som jag är van att skriva). Detta är ett problem, då jag inte har möjlighet att
uppdatera MySQL-servern (webbhotell) på egen hand.
På så sätt måste jag försöka skriva om mina querys med
JOIN-strukturer i stället för Subquerys. Är det någon som kan hjälpa mig
att översätta följande query till en med JOIN i stället?
(Jag är inte så haj på SQL för övrigt... :x)
Bakgrundsinfo:
Jag vill visa de personer ur personalen (tblPersonal) som
inte är uppbokade på jobb mellan två datum (StartDatum och SlutDatum)
SELECT p.PersonalID, p.Fornamn, p.Efternamn FROM tblPersonal p
WHERE p.PersonalID NOT IN(
select pb.PersonalID from tblPersonalBokning pb, tblBokning b
where pb.BokningsID = b.BokningsID
AND b.StartDatum <= #2004-06-10#
AND b.SlutDatum >= #2004-06-08#
)
Mycket tacksam för hjälp! :)
xrobxMedlem sedan mars 2003106 inlägg Nu har jag försökt att knappra ihop en variant av ovanstående SQL-fråga med JOIN´s.
Problemet är det att jag inte fattar hur jag får ut svaret
från SQL-frågan här under i omvänd ordning..
Alltså, jag vill att frågan ska returnera
all Personal förutom dem som min fårga nu returnerar...
Nu blev det krångligt, hoppas ni förstår vad jag menar :)
SELECT DISTINCT p.PersonalID, p.Fornamn, p.Efternamn
FROM tblPersonal p
RIGHT JOIN tblPersonalBokning pb ON p.personalID = pb.PersonalID
LEFT JOIN tblBokning b ON pb.BokningsID = b.BokningsID
WHERE b.StartDatum <= '2004-06-21'
AND b.SlutDatum >= '2004-06-19'
LarsGMedlem sedan dec. 200012 464 inlägg SELECT p.PersonalID, p.Fornamn, p.Efternamn
FROM tblPersonal p
left join tblPersonalBokning pb
on p.PersonalID = pb.PersonalID
left join tblBokning b
on pb.BokningsID = b.BokningsID
AND b.StartDatum <= '2004-06-10'
AND b.SlutDatum >= '2004-06-08'
where pb.personalID is null
Flyttas från Mysql
xrobxMedlem sedan mars 2003106 inlägg Tack för ditt svar!
Det verkar dock fortfarande inte fungera som jag tänkt mig.
Jag vet inte om det har med min databas att göra men
din fråga returnerar samma svar oberoende av vilka
parametrar man skickar med, skumt.. Det spelar alltså ingen roll
vad jag sätter StartDatum eller SlutDatum till, som svar
får jag hela tiden samma poster.
Det kanske har med min tabell-specifikation att göra "Allow Null" osv...?
Mvh
Robban
PDahlenMedlem sedan apr. 2004778 inlägg Har du ändrat du datumen i SQL-frågan ovan till parametrar då?
xrobxMedlem sedan mars 2003106 inlägg Ja det har jag gjort.
Jag har testat med flera olika datum, inklusive datum där jag
är 100% säker på att det inte finns några bokningar.
LarsGMedlem sedan dec. 200012 464 inlägg Kan du posta tabellbeskrivningar, lite exempeldata och förväntat resultat.
xrobxMedlem sedan mars 2003106 inlägg Gärna :)
Tabellstrukturer:
tblBokning:
Fält / Typ / Null / Standard
----------------------------------------------------------
BokningsID/ int(11)/ Nej/ 0
StartDatum/ date/ Ja / NULL
SlutDatum/ date/ Ja/ NULL
tblPersonalBokning:
Fält / Typ / Null / Standard
----------------------------------------------------------
BokningsID/ int(11)/ Nej/ 0
PersonalID/ int(11)/ Nej/ 0
tblPersonal:
Fält/ Typ/ Null/ Standard
----------------------------------------------------------
PersonalID/ int(11)/ Nej/ 0
Fornamn/ varchar(20)/ Ja/ NULL
Efternamn/ varchar(20)/ Ja/ NULL
Exempel:
Tabellen tblBokning innehåller en post med BokningsID 1,
StartDatum "2004-06-06" och SlutDatum "2004-06-10".
Jag har lagt till 2 poster i tabellen tblPersonalBokning
där båda posterna har BokningsID 1 och ena posten har PersonalID 1, och andra posten har PersonalID 2.
Alltså, personal med ID 1 och ID 2 är uppbokade från
"2004-06-06" till "2004-06-10".
Tabellen tblPersonal innehåller 10 poster med olika personal.
När jag kör frågan:
SELECT p.PersonalID, p.Fornamn, p.Efternamn
FROM tblPersonal p
left join tblPersonalBokning pb
on p.PersonalID = pb.PersonalID
left join tblBokning b
on pb.BokningsID = b.BokningsID
AND b.StartDatum <= '2004-06-10'
AND b.SlutDatum >= '2004-06-06'
where pb.personalID is null
vill jag att den returnerar de 8 poster med personal
som inte är uppbokade under "2004-06-06" till "2004-06-10".
Frågan returnerar i dagsläget, oberoende av vilka datum jag sätter i frågan, de poster som inte förekommer
i tabellen tblPersonalBokning.
Hoppas ni förstår vad jag menar! :)