2013-06-26 2 views
1

Я пытаюсь отобразить всю релевантную информацию для заданий, выполненных клиенту, используя JOIN TABLE QUERY.Ошибка JDBC mySQL DML

Вот мой код ...

SELECT Bill.BillID, Duty.TaskTime 
FROM Invoice 
LEFT OUTER JOIN Duty.JobID = Bill.JobID 
WHERE Job.CustomerID = Customer.CustomerID 

я получаю эту ошибку ... «# 1064 - У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с «.JobID WHERE Job.CustomerID = Customers.CustomerID» в строке 3'

+3

Я думаю, вам нужно потратить некоторое время на чтение, как писать SQL-соединения. Ваш запрос не имеет смысла. – kosa

+0

Не похоже, что вы указали какие-либо псевдонимы. –

ответ

0

Ваша ошибка состоит в том, как вы указываете ваши таблицы, может быть:

из счета, как Билл LEFT OUTER JOIN NameTable2, как пошлина на Dury.JobID = Bill.JobID

+0

Теперь я получаю сообщение об ошибке «WHERE Job.CustomerID = Customer.CustomerID».Я не знаю, что делать – user2525364

+0

нормально, так как теперь вы когда-то были я :) посмотрите: когда вы ссылаетесь на столбец в sql, мы используем следующую структуру: DataBase.Owner.TableOrAlias.column, так что вы написали WHERE Job.CustomerID, ошибка в том, что вы не указали таблицы Job в предложении FROM. Последний код над нами из LanMcLaird близок к тому, что вам нужно, извините, мы не можем догадаться, как ваша база данных, чтобы помочь вам –

1

проблема в том, что вы пытаетесь получить доступ к таблицам, которые вы не сказали, что запрос о в обоих ваших WHERE и SELECT статей , Когда вы скажете Bill.BillID в своем предложении SELECT, вы говорите, что хотите поле BillID из таблицы Bill.

Правило ваш синтаксис нарушения в том, что вы не можете использовать имя таблицы в SELECT или WHERE статей, если вы не упоминали в статье FROM (или JOIN).

Итак, давайте рассмотрим ваш запрос.

SELECT Bill.BillID, Duty.TaskTime 
FROM Invoice 
LEFT OUTER JOIN Duty.JobID = Bill.JobID 
WHERE Job.CustomerID = Customer.CustomerID 

Это означает, что вы хотите, чтобы выбрать поля из таблиц, названных Bill и Duty и фильтровать результаты, основанные на поля из таблиц Job и Customer. Однако вы упоминали только одну таблицу по имени в предложении FROM (Invoice). У вас почти присоединился к столу Duty, но вы присоединяетесь к нему в месте, где вы еще не указали (Bill). Я собираюсь угадать, что вы намерены использовать Bill как псевдоним для Invoice. Это означало бы, что то, что вы действительно хотите больше похож:

// Still incorrect 
SELECT Bill.BillID, Duty.TaskTime 
FROM Invoice AS Bill 
LEFT OUTER JOIN Duty ON Duty.JobID = Bill.JobID 
WHERE Job.CustomerID = Customer.CustomerID 

Но мы до сих пор не упоминается либо Job или Customer таблицы, на которые ссылаются в пункте WHERE. Чтобы использовать их, вам нужно также JOIN этих таблиц. Нам нужно узнать больше о вашей схеме, чтобы выяснить, как это сделать, но могу вам сказать, что вам понадобится в наименее еще две статьи JOIN. Предполагая, что у вас есть поле CustomerID в таблице Invoice, мы, вероятно, захотим присоединиться к этому.

// speculative 
SELECT Bill.BillID, Duty.TaskTime 
FROM Invoice AS Bill 
LEFT OUTER JOIN Duty ON Duty.JobID = Bill.JobID 
JOIN Customer ON Customer.CustomerID = Bill.CustomerID 
JOIN Job ON // Well, something...We don't know. 

Я сильно рекомендую потратить некоторое время на чтение и изучение отличной Wikipedia entry on SQL JOINs. Удачи ~