2013-10-14 32 views
14

ho più tabelle di un database:Access-SQL: Registrato interno con più tabelle

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 

ho bisogno di avere un'istruzione SQL in cui posso ottenere questi valori:

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

come w sto prendendo questo codice in SQL usando quei metodi di join ... sto scrivendo in VB6 ADODC, è la stessa sintassi in un SQL standard? grazie

+1

Il titolo della domanda menziona attualmente "database multipli", ma il testo della domanda parla di "più tabelle in un database". Per favore [modifica] (http://stackoverflow.com/posts/19367565/edit) la tua domanda per chiarire se stai solo trattando con un solo database. –

risposta

54

Se si sta scrivendo una query su un backend database di Access, è necessario utilizzare la seguente sintassi join:

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 

I nomi delle tabelle e delle colonne non sono importanti qui, ma il posizionamento delle parentesi è. Fondamentalmente, è necessario avere n - 2 parentesi sinistra dopo la clausola from e una parentesi destra prima dell'inizio di ogni nuova clausola join eccetto la prima, dove n è il numero di tabelle unite tra loro.

Il motivo è che la sintassi di join di Access supporta l'unione di solo due tabelle alla volta, quindi se è necessario aggiungerne più di due è necessario racchiudere tra parentesi quelle aggiuntive.

+0

ciao, ho provato il tuo approccio: SELECT tblOjt.id, tblStudent.firstname, tblStudent.middlename, tblStudent.lastname, tblStudent.course, tblCompany.companyname, tbAddressee.addressee, tblOjt.dateadded, tblOjt.datestarted, tblOjt.dateended, tblOjt .ojthours FROM ((tblOjt INNER JOIN tblStudent ON tblOjt.studentid = tblStudent.id) INNER JOIN tblCompany ON tblOjt.companyid = tblCompany.id) INNER JOIN tblAddressee ON tblOjt.addresseeid = tblAddressee.id; tuttavia, se lo eseguo in SQL, msAccess mi chiede di inserire il valore del parametro su tblAddressee.addressee .. non riesco a risolverlo perfettamente .. –

+0

/tblAddressee.addresseename.questo è ciò che msAccess mi sta chiedendo di inserire un parametro vale –

+1

capito, non ho tblAddressee.addresseename, ho tblAddressee.addressee grazie per le informazioni :) –

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 

trovato! Grazie all'approccio di Yawar ...

0

cercato di eseguire questo SQL using VBA ma non verrà eseguito utilizzando DoCmd.RunQuery. Ho provato l'SQL e funziona comunque.

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"