2013-10-14 82 views
14

mam wiele tabel w bazie danych:Access-SQL: Inner Join z wielu tabel

tblOjt

ID studentid courseid companyid addresseeid dateadded datestarted dateended ojthours 

1   3   1   1    1   9/25/2013         500 

tblStudent

ID lastname firstname middlename course gender renderedhours dateadded archive 

3  Dela Cruz  Juan  Santos  BSIT  Male   500 

tblCourse

ID coursealias coursename           hours 
1   BSIT  Bachelor of Science in Information Technology   500 

tblCompany

ID companyname 

1  MyCompany 

tblAddressee

ID addresseename 

1  John dela Cruz 

muszę mieć SQL, w którym można uzyskać to wartości:

tableOjt.id tableOJT.surname,firstname, and middlename course companyname addresseename dateadded datestarted dateended ojthours 

jak w chory dostaję ten kod w SQL przy użyciu tych metod łączenia ... im pisanie go w ADHD VB6, jest to ta sama składnia w standardowym SQL? Dzięki

+1

W tytule pytania jest obecnie mowa o "wielu bazach danych", ale tekst pytania mówi o "wielu tabelach w bazie danych". Proszę [edytuj] (http://stackoverflow.com/posts/19367565/edit) swoje pytanie, aby wyjaśnić, czy po prostu zajmujesz się tylko jedną bazą danych. –

Odpowiedz

54

Jeśli piszesz zapytania o inne backend bazy danych Access, należy użyć następujących dołączyć składni:

select 
    t1.c1 
, t2.c2 
, t3.c3 
, t4.c4 
from ((t1 
inner join t2 on t1.something = t2.something) 
inner join t3 on t2.something = t3.something) 
inner join t4 on t3.something = t4.something 

Nazwy tabel i kolumn nie są tu ważne, ale umieszczanie nawiasów jest. Zasadniczo musisz mieć nawiasy po lewej stronie po klauzuli from i jeden prawy nawias przed rozpoczęciem każdej nowej klauzuli join, z wyjątkiem pierwszej, gdzie n jest liczbą tabel, które są ze sobą połączone.

Powód jest taki, że składnia łączenia Access obsługuje dołączanie tylko dwóch tabel naraz, więc jeśli chcesz dołączyć więcej niż dwa, musisz dołączyć dodatkowe w nawiasach.

+0

Witam, próbowałem Twojego podejścia: SELECT tblOjt.id, tblStudent.firstname, tblStudent.middlename, tblStudent.lastname, tblStudent.course, tblCompany.companyname, tbAddressee.addressee, tblOjt.dateadded, tblOjt.datestarted, tblOjt.dateended, tblOjt .ojthours OD ((tblOjt INNER JOIN tblStudent ON tblOjt.studentid = tblStudent.id) WEJŚCIE DOŁĄCZ tblCompany ON tblOjt.companyid = tblCompany.id) WEJŚCIE DOŁĄCZ tblAddressee ON tblOjt.addresseeid = tblAddressee.id; jednak jeśli uruchomię go w SQL, msAccess prosi mnie, aby wprowadzić wartość parametru do tblAddressee.addressee .. nie mogę go doskonale wypróbować .. –

+0

/tblAddressee.addresseename.to właśnie msAccess prosi mnie o wprowadzenie wartości parametru –

+1

wymyśliłem to, nie mam tblAddressee.addresseename, mam tblAddressee.addressee dzięki za informacje :) –

1
SELECT tblOjt.id, tblStudent.firstname, tblStudent.middlename, 
     tblStudent.lastname, tblStudent.course, tblCompany.companyname, 
     tblAddressee.addressee 
FROM (((tblOjt 
    INNER JOIN tblStudent ON tblOjt.studentid = tblStudent.id) 
    INNER JOIN tblCourse ON tblOjt.courseid = tblCourse.id) 
    INNER JOIN tblCompany ON tblOjt.companyid = tblCompany.id) 
    INNER JOIN tblAddressee ON tblOjt.addresseeid = tbladdressee.id 

znalazł dzięki podejściu Yawar jest! ...

0

próbuje uruchomić ten SQL przy użyciu VBA, ale nie będzie działać przy użyciu DoCmd.RunQuery. Próbowałem SQL i działa.

str = "SELECT tbl_company.[Company], tbl_company.[Commodity], tbl_company.[Segment], tbl_company.[MainProduct]," & _ 
     " tbl_financials.[DataYear]," & _ 
     " mstr_financial.[FinancialData]," & _ 
     " tbl_financials.[Amount]," & _ 
     " tbl_financials.[Unit]," & _ 
     " tbl_company.[CompanyID]" & _ 
     " FROM (tbl_company" & _ 
     " INNER JOIN tbl_financials ON tbl_company.[CompanyID] = tbl_financials.[CompanyID])" & _ 
     " INNER JOIN mstr_financial ON tbl_financials.[FinID] = mstr_financial.[FinID] " & _ 
     " ORDER BY tbl_company.[Company], tbl_financials.[DataYear] DESC"