Avatar billede mini-me Nybegynder
20. oktober 2009 - 15:40 Der er 11 kommentarer og
1 løsning

Hjælp til joins

Hej,

Jeg har brug for lidt ekspert advice.

Jeg har nogle tabeller som jeg ønsker at joine så jeg får de nødvendige data fra tabellerne.

Mit outpu skal være noget ala:

PersonNavn, PersonTitle, FirmaNavn, Email, LandeNavn, TelefonPhone


Personer:
Contact_Id
Person_Id
Country_Id
Navn (Peter, Mads, Steen, Inger, klavs, bent)
Title

Telefon:
Phone_ID
Owner_Id = (Id på person_id)
Phone (123456,1244234,1321312,312312)


Email:
Email_Id
Contact_Id
Email_address (ps@exp.dk, ole@newz.dk, birger@newz.dk)

Firma:
Contact_Id
Navn (EXP, Newz, Google)

Land:
Country_Id
Navn (Danmark, England, Irland etc)
Avatar billede arne_v Ekspert
20. oktober 2009 - 15:48 #1
Du joiner tabellerne.

Du har 5 tabeller så du skal have 4 join betingelser.
Avatar billede mini-me Nybegynder
20. oktober 2009 - 15:51 #2
Sys jeg har forsøgt - men får nogle mærkelige outputs.

Kan du komme med et eksempel?
Avatar billede arne_v Ekspert
20. oktober 2009 - 15:58 #3
SELECT *
FROM personer,telefon,email
WHERE personer.person_id = telefon.owner_id
AND personer.contact_id = email.contact_id
AND personer.contact_id = firma.contact_id
AND personer.country_id = land.country_id

Hvis dine data indeholder det de skal så bør du få det hele joinet sammen med den.
20. oktober 2009 - 16:08 #4
Proev dette her.  Hvis det ikke virker saa beskriv mig tabellerne saa jeg kan lave din query.

SELECT Personer.Navn, Firma.Navn, Email.Email_address, Land.Navn, Telefon.Phone
FROM Personer p
JOIN Telefon t ON p.Person_Id = t.Owner-Id
JOIN Email e ON p.Contact_Id = e.Contact_Id
JOIN Firma f ON p.Contact_Id = f.Contact_Id
JOIN Land l ON p.Country_Id - l.Country_Id
Avatar billede mini-me Nybegynder
20. oktober 2009 - 16:23 #5
Christian:

Dit virker næsten out of the box

Har lige rettet et par slå fejl til og så virker det.

Men sys der er et eller andet der ikke helt er som det skal være - får utrolig man dubletter ser det ud til
20. oktober 2009 - 17:18 #6
Maaske ville det hjaelpe hvis du retter til SELECT DISTINCT ......

Hvis det ikke hjaelper saa maa jeg vide mere om hvordan tabellerne er skruet sammen.
Avatar billede janus_007 Nybegynder
20. oktober 2009 - 18:12 #7
Det er slet ikke utænkeligt at der kommer data ud som ligner dubletter.
Det hænger sammen med normaliseringen af tabeller og er helt naturligt, flere emails, flere telefonnumre osv. vil alle give det du kalder for dubletter :)

Hvis du laver en distinct i et join er dit join forkert!
Avatar billede mini-me Nybegynder
20. oktober 2009 - 18:38 #8
Jeg takker for input Christian smid et svar for point.
20. oktober 2009 - 20:08 #9
Her er mit svar.
21. oktober 2009 - 20:27 #10
Er der gaaet noget galt?  Jeg kan ikke see at spoergsmaalet er blevet afsluttet og points givet.
Avatar billede mini-me Nybegynder
28. oktober 2009 - 23:30 #11
Hej,

Jeg tillader lige at smide et men ind ;)

Det virker MEN når jeg har følgende SQL :

                strSQL = ""
                strSQL = "SELECT p.person_Id as personId, p.firstname, p.lastname, p.title, f.name AS contactName, p.contact_id as contactId, e.email_address, l.name AS countryName, t.phone"
                strSQL = strSQL & " FROM        CRM5.person p INNER JOIN "
                strSQL = strSQL & "CRM5.phone t ON p.person_id = t.owner_id INNER JOIN "
                strSQL = strSQL & "CRM5.email e ON p.person_id = e.person_id INNER JOIN "
                strSQL = strSQL & "CRM5.contact f ON p.contact_id = f.contact_id INNER JOIN "
                strSQL = strSQL & " CRM5.country l ON p.country_id = l.country_id"
                strSQL = strSQL & " WHERE "
                strSQL = strSQL & " (p.firstname + p.lastname like '%"&strContactName&"%') "
                strSQL = strSQL & " AND (f.name like '%"&strOrganization&"%') "
                strSQL = strSQL & " AND (e.email_address like '%"&strEmail&"%') "
                strSQL = strSQL & " AND (l.name like '%"&strCountry&"%') "
               
                strSQL = strSQL & " AND (t.search_phone LIKE '%"&strPhone&"%' AND (t.ptype_idx = 1 or t.ptype_idx=16389)) "
               
               
                strSQL = strSQL & " AND (t.search_phone like '%"&strFax&"%' AND t.ptype_idx=3) "


Det er med hensyn til Phone delen, for som jeg ser det er telefon kun tilknyttet en person. Men telefon kan også være tilknyttet på contact.

Eks. t.search_phone like '%75007700%' AND t.ptype_idx=3 giver ikke noget resultat selvom der i databasen "phones" findes et fax nummer.
29. oktober 2009 - 08:04 #12
Et hurtigt mini-feed-back her.  Ellers er det nok klarest at du starter et nyt spoergsmaal.

Jeg er ikke sikker paa at jeg forstaar dig precis.  I din query-string spoerger du efter telefonnumre hvor p.person_id = t.owner_id.  Saa hvis din p tabel indeholder en kontakt_id med et telefonnumber der er forskelligt fra person_id's telefonnummer saa vaelger du det fra.

Men hvis det er tilfaeldet saa er der noget galt med din tabelstruktur.  Den er ikke normaliseret.

Det ville jeg godt kikke paa I ET NYT SPOERGSMAAL.  Og hvis du laver et nyt spoergsmaal saa ser alle de andre kloge hoveder det ogsaa og har maaske bedre ideer end mig.

Du skal saa nok i det spoergsmaal inkludere spefikationerne af tabellerne og eksempler paa brug.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester