2014-10-20 67 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。你必须用LEFT JOIN和RIGHT JOIN进行模拟。 – 2014-10-20 07:43:35

+0

JOIN类型并不真正困扰着我。这就是没有任何表格(A和B)会加入我似乎做的任何事情。 – ViRALiC 2014-10-20 07:47:33

+0

试试这个(MySQL的没有完全连接) http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql – 2014-10-20 07:48:31

回答

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; 

个人而言,我不喜欢这样的连接,你可以尝试用简单的方式(IM不知道加入的条件是正确的,请检查):

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 2014-10-20 07:49:49

+2

这看起来像一个很好的回答这个问题,你可能更新你的答案与解释虽然吗? OP显然是在学习,只是一个答案不会帮助他的学习太多... – HoneyBadger 2014-10-20 07:50:43

+0

@ViRALiC更新。错过选择* – 2014-10-20 07:53:38