2013-07-03 2 views
1

Кто-нибудь есть идеи, почему это не работает?Попытка получить внутреннее соединение через 3 стола для работы

"SELECT TT.SubmitDate AS SD, TT.AssignedEmp as AE, TT.JobNum as JN, 
     TT.BegMile as BM, TT.EndMile as EM, TT.TotMile as TM, TT.TandT as TA, TT.Daily as DA, 
     TI.InTime as IT, TI.OutLunch as OL, TI.InLunch as IL, TI.OutTime as OT, TI.TotalTime as TO, 
     WO.JobName 
FROM TimeTracking TI 
INNER JOIN TransportTable TT 
ON TI.TimeSheetNum = TT.TimeSheetNumber 
INNER JOIN WorkOrderNum WO 
ON TT.JobNum = WO.JobNumber 
WHERE TT.AssignedEmp='$empname' AND TT.SubmitDate >= '$start' AND TT.SubmitDate <='$end' 
ORDER BY TT.SubmitDate"; 

Это дает мне сообщение об ошибке:

SQL error: [Microsoft][ODBC Microsoft Access Driver] Syntax error 
(missing operator) in query expression 'TI.TimeSheetNum = TT.TimeSheetNumber 
INNER JOIN WorkOrderNum WO ON TT.JobNum = WO.JobNumber'., SQL state 37000 
in SQLExecDirect 

Запрос работает нормально, если удалить одно из двух соединений, так что я знаю, что проблема не связана с стыки индивидуально ... утра Я пропустил что-то простое?

+0

Он показывает просто синтаксическую ошибку (отсутствующий оператор). Итак, лучше внимательно посмотреть сверху. Надеюсь, вы знаете синтаксис о внутренних соединениях, чтобы получить более двух табличных данных. –

+0

Что происходит, когда вы удаляете все предложение 'where'? Какие типы 'TimeSheetNum (ber)' и 'JobNum (ber)'? Off Topic, но, на мой взгляд, лучше соглашаться с именами столбцов. Неважно, используете ли вы 'Num' или' Number', но делаете сами * (и другие) * пользу и выбираете ** один **. –

+0

Еще одна проблема, если я удалю предложение where. TimeSheetNum (ber) и JobNum (ber) - оба ints. И да, я испортил имена столбцов, и это то, что я имел в виду, чтобы вернуться и исправить. – Hoser

ответ

4

Доступ требует скобок в разделе FROM запросов, содержащих более одного соединения. Если возможно, используйте конструктор запросов Access для создания объединений. Дизайнер запросов знает, где разместить круглые скобки, чтобы поддерживать работоспособность db-движка.

SELECT * 
FROM 
    (TimeTracking TI 
    INNER JOIN TransportTable TT 
    ON TI.TimeSheetNum = TT.TimeSheetNumber) 
    INNER JOIN WorkOrderNum WO 
    ON TT.JobNum = WO.JobNumber 

Если присоединяется работы в аналогичной простой запрос, вы можете добавить свои SELECT поля, в WHERE условия, и ORDER BY.

+0

Отлично. Только то, что мне было нужно. Спасибо! – Hoser

+0

@HansUp - thx. Я снова узнал что-то новое, и день еще молод. . –

Смежные вопросы