Access-SQL: Внутреннее соединение с несколькими таблицами
У меня есть несколько таблиц в базе данных:
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
Мне нужно иметь оператор SQL, в котором я могу получить эти значения:
tableOjt.id tableOJT.surname,firstname, and middlename course companyname addresseename dateadded datestarted dateended ojthours
как я получу этот код в SQL, используя эти методы соединения... im, записывающий его в VB6 ADODC, это тот же синтаксис в стандартном SQL? спасибо
Ответы
Ответ 1
Если вы пишете запрос на бэкэнд базы данных Access, вам необходимо использовать следующий синтаксис соединения:
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
Названия таблиц и столбцов здесь не важны, но размещение скобок. В принципе, вам нужно иметь n - 2 левых круглых скобки после предложения from
и одной правой скобки перед началом каждого нового предложения join
, кроме первого, где n - количество соединяемых таблиц.
Причина в том, что синтаксис соединения доступа поддерживает объединение только двух таблиц за раз, поэтому, если вам нужно присоединиться более двух, вам нужно заключить дополнительные в круглые скобки.
Ответ 2
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
нашел его благодаря методу Явара...
Ответ 3
пытался запустить этот SQL с помощью VBA, но не будет работать с DoCmd.RunQuery. Я пробовал SQL и все работает.
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"