2010-10-22 4 views
0
SELECT DISTINCT bw.Bor_name 
FROM Borrower AS bw, Loan AS l 
JOIN Book_Copy AS bc 
ON l.Bc_id = bc.Bc_id 
WHERE bw.Bor_id = l.Bor_id 
GROUP BY l.Bor_id, bc.Bt_id 
HAVING COUNT(bc.Bt_id) > 1 
AND COUNT(l.Bor_id) > 1; 

Это прекрасно работает в тестовой среде MySQL, но не работает в MS Access 2007, где мне действительно нужно его запустить. У меня есть несколько других запросов, которые связаны с использованием JOIN, и он дает ту же ошибку и для них: «Синтаксическая ошибка в предложении FROM».Проблема SQL JOIN в MS Access 2007

Edit:

SELECT DISTINCT l.Bor_id 
FROM Loan AS l 
INNER JOIN Book_Copy AS bc 
ON l.Bc_id = bc.Bc_id 
GROUP BY l.Bor_id, bc.Bt_id 
HAVING COUNT(bc.Bt_id) > 1 
AND COUNT(l.Bor_id) > 1 

На самом деле это один работает отлично и дает мне нужный номер документа, но то, что я хочу, чтобы вывести это имя, которое содержится в таблице Заемщика.

+0

Вы действительно используете MySQL для прототипа для MS Access? Просто любопытно. –

+0

Это не источник вашей проблемы (проблема с JOIN без INNER/LEFT/RIGHT - проблема), но почему вы сделали одно из своих ячеек явно, l => bc и одно неявно, bw => l? Оба являются INNER JOINs, поэтому должна быть какая-то проблема, выполняющая как JOIN. Хотя Jet обычно оптимизирует эквивалентные неявные и явные JOINs одинаково, я хотел бы, чтобы это было явным JOIN - я никогда не использую неявные JOIN, кроме случаев, когда есть веские основания для этого. –

+0

@Larry: MySQL - это то, что у меня есть в качестве среды тестирования дома. К сожалению, у меня нет Access 2007 для тестирования прямо сейчас, и мой ответ на то, что на самом деле помогло, будет опубликован не ранее, чем в понедельник. – User3419

ответ

0
SELECT DISTINCT bw.Bor_name 
FROM Borrower AS bw, Loan AS l 
JOIN Book_Copy AS bc 
ON (l.Bc_id = bc.Bc_id) 
WHERE bw.Bor_id = l.Bor_id 
GROUP BY bw.Bor_name, bc.Bt_id 
HAVING COUNT(bc.Bt_id) > 1 
AND COUNT(l.Bor_id) > 1; 

В конечном счете этот человек выполнил эту работу. Еще раз спасибо всем, кто внес советы!

0

Я думаю, вы не можете смешивать неявное и явное соединение. вы должны попробовать с этим

SELECT DISTINCT bw.Bor_name 
FROM Borrower AS bw 
join Loan AS l 
on bw.Bor_id = l.Bor_id 
JOIN Book_Copy AS bc 
ON l.Bc_id = bc.Bc_id 
GROUP BY l.Bor_id, bc.Bt_id 
HAVING COUNT(bc.Bt_id) > 1 
AND COUNT(l.Bor_id) > 1; 
+0

Вы можете смешивать неявные/явные JOINs в Jet/ACE/Access SQL. Проблема заключается в отсутствии типа JOIN, INNER/LEFT/RIGHT. –

+0

просто для подтверждения - он отлично работает в MySQL. Я снова проведу тест в Access и дам вам знать, каков был результат. – User3419

+0

Не должно быть никаких проблем с смешиванием неявных и явных JOINs в Access, либо при условии использования правильного синтаксиса JOIN. –

4

Я не тестировал с Access 2007. Однако Access 2003 жалуется на «Ошибка синтаксиса в предложении из» если я пытаюсь РЕГИСТРИРУЙТЕСЬ в одиночку (без явного использования INNER JOIN). Кажется, что движок базы данных требует, чтобы вы назначали JOIN как ПРАВОЕ СОЕДИНЕНИЕ, ВЛЕВО ИСПОЛЬЗОВАНИЕ ИЛИ ВХОДИТЬ ВХОД; Я не могу найти никаких других вариантов, которые он примет.

Обновление: Предлагаю вам создать новый запрос с помощью конструктора запросов Access. Просто добавьте таблицы и настройте соединения. (Оставьте GROUP BY и все остальное для более поздних версий.) Затем вы можете переключиться на SQL View, чтобы увидеть тип синтаксиса соединения, который делает доступ счастливым.

+0

Большое спасибо за ответ здесь! Да, это то, что я пробовал до сих пор, но безуспешно. – User3419

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