2014-10-20 3 views
0

Я в настоящее время участвую в использовании MySQL. Проблема в том, что самообучение не всегда легко, и я часто застреваю. Обычно я пытаюсь расправляться, но сегодня такого дня нет.Ошибка синтаксиса MySQL при присоединении

Я использую SQLFiddle (http://sqlfiddle.com/) для запуска своих запросов в отношении базы данных, пока не найду еще какое-то постоянное программное решение.

Моя проблема в моем запросе.

(SELECT customer.customername, the_account.balance, branch.branch_name  
    FROM customer, has_account, the_account, branch 
    WHERE customer.ssn = has_account.assn 
    AND has_account.ano = the_account.accountno 
    AND the_account.branchid = branch.branchid) AS a 
JOIN 
(SELECT customer.customername, loan.amount, branch.branch_name 
    FROM customer, has_loan, loan, branch 
    WHERE customer.ssn = has_loan.lssn 
    AND has_loan.lno = loan.loanno 
    AND loan.branchid = branch.branchid) AS b 
ON has_account.assn = has_loan.lssn; 

Теперь, я уверен, что синтаксис ошибка крайне очевидна для кого-то, кто знает SQL наизусть, но я просто застрял в колее, и не могу выкопать себя из.

Мое понимание заключалось в том, что я мог хотя бы попытаться объединить все две таблицы вместе.

Полный обзор моей базы данных, запрос и т. Д., Перейдите по ссылке http://sqlfiddle.com/#!2/1943b/85.

И, пожалуйста, будьте нежны. Я знаю, что это, вероятно, ошибка новобранец, но изучение этого материала по своему усмотрению не так просто, как вы думаете.

Update1:

Так после попытки предложенная:

(SELECT has_account.assn as assn, customer.customername, the_account.balance, branch.branch_name  
    FROM customer, has_account, the_account, branch 
    WHERE customer.ssn = has_account.assn 
    AND has_account.ano = the_account.accountno 
    AND the_account.branchid = branch.branchid) AS a 

JOIN 

(SELECT has_loan.lssn as lssn, customer.customername, loan.amount, branch.branch_name 
    FROM customer, has_loan, loan, branch 
    WHERE customer.ssn = has_loan.lssn 
    AND has_loan.lno = loan.loanno 
    AND loan.branchid = branch.branchid) AS b 

ON b.lssn = a.assn; 

который выглядел хорошо, и сделал все чувства в мире для меня, SQLFiddle жалуется:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS a JOIN (SELECT has_loan.lssn as lssn, customer.customername, loan.amount, bra' at line 5: (SELECT has_account.assn as assn, customer.customername, the_account.balance, branch.branch_name FROM customer, has_account, the_account, branch WHERE customer.ssn = has_account.assn AND has_account.ano = the_account.accountno AND the_account.branchid = branch.branchid) AS a JOIN (SELECT has_loan.lssn as lssn, customer.customername, loan.amount, branch.branch_name FROM customer, has_loan, loan, branch WHERE customer.ssn = has_loan.lssn AND has_loan.lno = loan.loanno AND loan.branchid = branch.branchid) AS b ON b.lssn = a.assn

(На всякий случай кто-то хотел получить сообщение об ошибке целиком!)

+0

MySQL не поддерживает FULL OUTER JOIN. Вы должны подражать ему с ЛЕВЫМ ПРИСОЕДИНЕНИЕМ, объединенным с ПРАВОЙ ПРИСОЕДИНЕНИЕ. –

+0

Тип JOIN на самом деле не то, что меня беспокоит. Это то, что ни одна из таблиц (A и B) не присоединится ко всему, что я, кажется, делаю. – ViRALiC

+0

Попробуйте это (MySQL не имеют полных объединений) http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql –

ответ

3
select * from 
(SELECT has_account.assn as assn, customer.customername, the_account.balance, branch.branch_name  
    FROM customer, has_account, the_account, branch 
    WHERE customer.ssn = has_account.assn 
    AND has_account.ano = the_account.accountno 
    AND the_account.branchid = branch.branchid) AS a 
JOIN 
(SELECT has_loan.lssn as lssn, customer.customername, loan.amount, branch.branch_name 
    FROM customer, has_loan, loan, branch 
    WHERE customer.ssn = has_loan.lssn 
    AND has_loan.lno = loan.loanno 
    AND loan.branchid = branch.branchid) AS b 
ON b.lssn = a.assn; 

Лично я не люблю такие соединения, вы можете попробовать его в простой путь (я не уверен, соединяет условия являются правильными, пожалуйста, проверьте):

SELECT 
    customer.customername, 
    the_account.balance, 
    branch.branch_name, 
    loan.amount 
FROM customer 
JOIN has_account on has_account.assn = customer.ssn 
JOIN the_account on the_account.accountno = has_account.ano 
JOIN branch on branch.branchid = the_account.branchid 
JOIN has_loan on has_loan.lssn = customer.ssn 
JOIN loan on loan.loanno = has_loan.lno; 
+0

Не работает. Все еще бросает мне синтаксическую ошибку: http://sqlfiddle.com/#!2/1943b/89 – ViRALiC

+2

Это похоже на хороший ответ на вопрос, не могли бы вы, возможно, обновить свой ответ с объяснением? OP явно учится, просто ответ не поможет его исследованиям слишком много ... – HoneyBadger

+0

@ViRALiC обновлено. Пропущенный выбор * –

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