25. september 2002 - 10:41Der er
10 kommentarer og 1 løsning
SELECT problem
Jeg har prøvet at lave en miniudgave af mit problem:
I MySQL har jeg 2 tabeller:
Person { id, exid, navn, adresse, telefon } ExternPerson { exid, adresse }
Hvis der ikke er angivet et nummer i exid i tabellen Person, skal den hente adresse fra Person. Hvis der er angivet et nummer i exid i tabellen Person, skal den hente adresse fra ExternPerson.
Hvordan kan det laves uden at der laves om på designet?
Jeg tror ikke du kan lave det i en selection i mysql Du er nødt til at tjekke det før, og så derefter lave en SQL sætning alt efter hvad den forgående resultat bliver
proacces: Jeg arbejder lige nu på at få det til at virke. Umiddelbart ser det ud til at være det helt rigtige du kom med. Jeg har bare problemer med at få en WHERE lagt ind i statementet...
Grunden til den mærkelige opbygning, er at ExternEmployee er en tabel der bliver opdateret "udefra" hver nat. Derfor har jeg ingen mulighed for selv at opdatere i disse oplysninger. Employee er "min egen" tabel hvor der kan oprettes medarbejdere. Når en medarbejder i "min egen" tabel får angivet et beocademyno, skal den hente nogle af oplysningerne fra Employee og nogle fra ExternEmployee. Ellers skal den kun hente fra Employee.
Dit udgangspunkt må være at binde de 2 tabeller sammen ved et LEFT JOIN på beocademyno og så se om der er nogen externe oplysninger i ExternEmployee... vha. ISNULL()
Du kan bruge IF i stedet for IFNULL... og så lave tjekket på e.beocademyno...
SELECT p.employeeid, IF(e.beocademyno Is Not Null, e.jobtitle, p.jobtitle) jobtitle, IF(e.beocademyno Is Not Null, e.firstname, p.firstname) firstname, IF(e.beocademyno Is Not Null, e.lastname, p.lastname) lastname, IF(e.beocademyno Is Not Null, e.address1, p.address1) address1, IF(e.beocademyno Is Not Null, e.address2, p.address2) address2, IF(e.beocademyno Is Not Null, e.zipcode, p.zipcode) zipcode, IF(e.beocademyno Is Not Null, e.city, p.city) city, IF(e.beocademyno Is Not Null, e.countryid, p.countryid) countryid, e.state, IF(e.beocademyno Is Not Null, e.phone, p.phone) phone, IF(e.beocademyno Is Not Null, e.mobile, p.mobile) mobile, IF(e.beocademyno Is Not Null, e.fax, p.fax) fax, IF(e.beocademyno Is Not Null, e.email, p.email) email, IF(e.beocademyno Is Not Null, e.birthday, p.birthday) birthday, p.hiredsince, IF(e.beocademyno Is Not Null, e.sex, p.sex) sex, IF(e.beocademyno Is Not Null, e.nativelanguage, p.nativelanguage) nativelanguage, IF(e.beocademyno Is Not Null, e.otherlanguage, p.otherlanguage) otherlanguage, IF(e.beocademyno Is Not Null, e.region, p.region) region, p.careeraspiration, p.cv, p.employeeno, p.beocademyno, IF(e.beocademyno Is Not Null, e.cardno, p.cardno) cardno, IF(e.beocademyno Is Not Null, e.cardstatus, p.cardstatus) cardstatus, IF(e.beocademyno Is Not Null, e.active, p.active) active, p.salesperson, p.technician, p.skillsinaudio, p.skillsinvideo, p.skillsininstallation, p.trainer, p.shopowner, p.leader, p.internalemployee, p.username, p.password, p.access, p.shopid FROM Employee p LEFT JOIN ExternEmployee e ON p.beocademyno=e.beocademyno;
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.