两个表的 SQL 查询自连接

标签 sql inner-join

我遇到了以下问题。 有两个表:

银行

bank_id [PK] | name
---------------------
 1            Bank_1
 2            Bank_2
 3            Bank_3
 4            Department_1
 5            Department_2
 6            Department_3

关系

id [PK] | parent_id | filial_id
--------------------------------   
 1         1            5
 2         2            4
 3         2            6

需要选择所有银行部门对。 没有部门的银行也应该选择。

我写了以下查询:

SELECT A.name AS 'Bank', B.name  AS 'Department'
FROM banks A,
     banks B 
        JOIN relations ON B.bank_id=relations.filial_id
                      AND A.bank_id = relations.parent_id;

但它只显示有部门的银行。我应该如何更改查询以输出没有部门的字符串 Bank_3??

最佳答案

我认为你的表格应该如下所示

  1. 银行表仅包含bank_id、银行名称。其中 bank_id 将为主键。
  2. 部门会有单独的表格,其中包括bank_id、dept_id、dept_name
  3. 部门表中的bank_id将是银行表中的外键
  4. 部门 ID 将成为部门表中的主键

您的银行表将按如下方式划分。

    bank_id  bank_name
    1            Bank_1
    2            Bank_2
    3            Bank_3

    bank_id dept_id dept_name
       1     4            Department_1
       2     5            Department_2
       2     6            Department_3

然后您可以简单地使用左连接来获取所需格式的数据。

目前,您的银行表中没有银行和部门的标识列。

关于两个表的 SQL 查询自连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42199327/

相关文章:

sql - Postgresql SQL 排除查询

sql - 如何在 grails 中进行 Group By 以按 Count(*) 排序

mysql - 在 mySQL 中使用 IN/NOT IN

sql - 同时在多个列上选择不同的,并在 PostgreSQL 中保留一列

mysql - 无法使用sequelize连接带有外键的2个表

php - mysql如何向子表中插入数据

sql - 连接表时 PostgreSQL ON 与 WHERE?

sql - 将数据从一个表更新到另一个表(在数据库中)

mysql inner join 给出不好的结果(?)

mysql - 我可以指定连接发生的顺序吗?