【问题标题】:Join 2 tables with different columns加入具有不同列的 2 个表
【发布时间】:2013-03-13 13:02:26
【问题描述】:

银行数据库架构:

account    (account_number, branch_name, balance) 
branch     (branch_name, branch_city, assets) 
customer   (customer_name customer_street, customer_city) 
loan       (loan_number, branch_name, amount) 
deposito   (customer_name, account_number) 
borrower   (customer_name, loan_number) 

我怎么知道借款人的帐号????

【问题讨论】:

  • 那是你的全表结构吗?你怎么知道account_number 与每个customer_name 对应什么?
  • 表 2 是否有指向表 1 的链接,例如table2.account_number?
  • 表 2 没有指向表 1 的链接。
  • 银行数据库模式:account(account_number, branch_name, balance) branch (branch_name, branch_city, assets) customer (customer_name customer_street, customer_city) 贷款 (loan_number, branch_name, amount) depositor((customer_name, account_number) borrower(customer_name, loan_number) 这是原始数据库....我怎么知道借款人的 account_number ????
  • @NamanKhator 请在您的问题中添加此内容,以便您得到好的答案。为什么你第一次没有在你的问题中发布?我们怎么知道??????

标签: mysql


【解决方案1】:

试试这个..(根据您的评论)

SELECT c.customer_name,
  a.account_number
FROM customer c
  INNER JOIN depositor d
    ON c.customer_name = d.customer_name
  INNER JOIN borrower b
    ON d.customer_name = b.customer_name
  INNER JOIN account a
    ON a.account_number = d.account_number

DEMO

更新:

SELECT b.customer_name,
  d.account_number
FROM borrower b
  INNER JOIN depositor d
    ON d.customer_name = b.customer_name
  INNER JOIN account a
ON a.account_number = d.account_number

DEMO

【讨论】:

  • 如果你添加了一个客户,而他只是一个借款人不是一个存款人,它不起作用:(
  • @NamanKhator 检查我更新的答案。它提供所有借款人及其帐号
  • 但是 e, f, g, h 如果他们中的一个人只需要贷款,那么我无法获得他们的帐号:(
  • 谢谢大家,解决了
【解决方案2】:

根据您的评论,customers 似乎通过depositor 表与accounts 相关。如果是这样,那么您可以使用:

select c.customer_name,
  a.account_number,
  a.balance
from customer c
inner join depositor d
  on c.customer_name = d.customer_name
inner join account a
  on d.account_number = a.account_number

SQL Fiddle with Demo

如果您想知道借款人的帐号,那么您将在borrower 表中添加一个JOIN:

select c.customer_name,
  a.account_number,
  a.balance
from customer c
inner join depositor d
  on c.customer_name = d.customer_name
inner join account a
  on d.account_number = a.account_number
inner join borrower b
  on c.customer_name = b.customer_name

您的数据库设计似乎存在一些问题。根据您当前的结构,如果您想知道borrowers,那么您必须加入depositor 以获取帐号或loan 表以将贷款与帐户关联。

如果您加入 loan 表,查询将是:

select b.customer_name,
  a.account_number
from borrowers b
inner join loan l
  on b.loan_number = l.loan_number
inner join account a
  on l.branch_number = a.branch_number

但问题是loan 表只能在branch_number 上加入account,这个分支号将与多个帐户相关联。您应该有一个列来标识borrower 和每个loan,因为缺少此列,您目前无法找到每个借款人的帐号。

【讨论】:

  • @NamanKhator 发布问题时,您应该具体说明您想要的结果。
  • 如果你想要借款人而不是存款人,这是一个非常简单的修改。如果您无法弄清楚这么多,请查阅有关 SQL 的基础书籍。
  • @NamanKhator 查看我的编辑,如果您想要借款人的详细信息,那么您也需要加入该表
  • @NamanKhator 我的建议是使用每个表格中的数据编辑您的原始帖子,并解释您想要的结果。在这一点上,我们会猜测如何解决这个问题。
  • @NamanKhator 评论是为了澄清和一些讨论,而不是为了发布代码或应该在你的问题上的细节。此外,这个答案适用于您的原始问题,以及您在 cmets 上提出的修改后的问题,以及您添加更多要求时的另一个问题。要么你停下来写一个完整的完整的问题,要么你的帖子可能被关闭为“不是一个真正的问题”,因为几乎不可能理解你在问什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 2013-05-26
  • 2014-06-05
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多