Hej! det låter som du designat din tabell felaktigt. Det är inte jag som designat databasen, och jag kan inte göra något åt den. Man får jobba med den utrustning man fått sig tilldelad... vad heter fältnamnet /tabellen där telefonnummer står, samt vad är det för databas, access, sql, oracle osv.. Ja alltså.. *funderar på hur jag ska förklara bäst* Testa följande...join med sig själv?
Här kommer veckans konstigaste (?) fråga..
Jag har en tabell som används till flera sorters nummer, vi kan säga telefonnummer och personnummer.
I en datagrid vill jag visa alla personer med personnummer, namn och telefonnummer. Går det?
Inga problem med första delen, personnr och namn:
select nrtyp.persnr,person.namn from person, inner join nrtyp on person.personid = nrtyp.personid where nrtyp_id = 'PNR'.
Fast sen vill jag ju ha med telefonnummret, som ligger i nrtyp tabellen med nrtyp_id = 'TELE'.
BÖR kanske tillägga att det är en left outer join, så det går ju bra,
select nrtyp.persnr,person.namn from person, inner join nrtyp on person.personid = nrtyp.personid left outer join nrtyp nrtyp1 on nrtyp.personid = nrtyp1.personid where nrtyp.nrtyp_id = 'PNR' and nrtyp1.nrtyp_id = 'TELE'.
Detta gör ju att den ändå inte tar med poster som har personnummer men inte telefonnummer,men jag vill ha med posterna ändå.Sv: join med sig själv?
Du borde ha 2 tabeller
1. person (person_id)
id, förnamn, efternamn, personnr
2. telefon (person_id)
id, telefon (kan finnas fler telefon med samma id, ex bil, hem, arb osv)Sv: join med sig själv?
Sv: join med sig själv?
Sv: join med sig själv?
Det finns ju naturligtvis flera tabeller, men det är den här tabellen som används till massor med saker.
Den har bla
nrtyp_id (nyckel)
artikel_id(nyckel i massor med tabeller)
artikelnr (ej nyckel, kan finnas många med samma nummer)
I denna tabell samlas olika nr som finns för artiklar,
bla. personnummer, telefonnummer, skostorlket etc.etc.. kan vara vad som helst. Till detta finns en tabell med "accepterade" typer (se ovan) som är kodade i nrtyp_id ('TELE', 'SKO', 'PNR')
SEN ska jag visa innehållet i en annan tabell, med övrig artikelinfo, tex namn, adress.. OCH det artikelnr som finns för den artikeln med koden 'PNR' OCH OM DET FINNS: det artikelnr som finns för den artikeln med koden 'TELE'
Det är en hyfsat noggran beskrivning. Det är en sql-databas.
Problemet är just att det kan vara så att telenr inte finns, annars fungerar en outer join perfekt.
Men jag har iof börjat lösa det på annat sätt så det är ingen kris, men intressant om någon har någon idé...Sv: join med sig själv?
select * from ...
where ....
and ....
and ....
having nrtyp_id = "TELE"
Du kan även använda UNION kommandot - se kurser, för att fånga upp alla poster ur samma tabell oavsett om vissa värden inte finns i en av selectsatserna. Se detta exempel: http://www.4guysfromrolla.com/webtech/sqlguru/q080600-1.shtml
I SQL servern skall jag lära er ett tips som gör det lite enklare att läsa koden när man sätter (left/right joins) - se exemplet:
select a.artikelnr, b.artikelnamn, c.pris
from produkter a, artiklar b, priser c
where a.id *= b.id
and a.id =* c.id
having a.artikeltyp = "frukter"
Och för Oracle är det + tecknet som gäller.
/Pelle