首页 > 解决方案 > 创建一个视图,将多个表和另一个单独的表连接到一个表中

问题描述

我在下面有这些表格

table_1 [ id(主键,AI),名字,姓氏]

table_2 [id(主键,AI),table_1_id,payment_type,地址]

table_3 [ id(主键,AI),table_1_id,table_4_id ]

table_4 [ id(主键, AI), card_number, plan_name ]

我想要达到的目标

  1. 连接表 1 和表 2,其中表 2 table_1_id = 表 1 id
  2. 连接表 3 和表 4,其中表 3 table_4_id = 表 4 id
  3. 加入表 3 和表 4,保留表 3 列 table_1_id
  4. 将连接表 3 和表 4 的新表结果连接到每个 table_1_id 连接表 1 和 2 的新表结果

下面是我尝试过的

SELECT 
    `t1`.`id` AS `t1_id`,
    `t1`.`firstname` AS `bill_firstname`,
    `t1`.`lastname` AS `bill_lastname`,
    `t2`.`payment_type` AS `payment_type`,
    `t2`.`address` AS `bill_address`,
FROM
        (`table1` `t1`
        JOIN `table2` `t2` ON ( (`t1`.`id` = `t2`.`table_1_id`) )
        )

不幸的是,我无法加入其他人,非常感谢任何帮助。

标签: mysql

解决方案


这将结合所有表格并显示所有详细信息。如果您只有 1:1 关系,则每个 t1.id 获得 1 行 如果您有一个或多个表 1:n 关系,则每个 id 将获得 n 多行。

因此,您也将拥有与 t1.id 以 1:1 关系的列对数据进行分组,其余的您必须使用聚合函数。

例如,如果您每个 t1.id 有 2 个信用卡号,您必须决定要显示的内容 GROUP_CONCAT 会将卡号与逗号连接起来

SELECT 
    `t1`.`id` AS `t1_id`,
    `t1`.`firstname` AS `bill_firstname`,
    `t1`.`lastname` AS `bill_lastname`,
    `t2`.`payment_type` AS `payment_type`,
    `t2`.`address` AS `bill_address`,
    `t4`.`card_number` AS `card_number`,
    `t4`.`plan_name` AS `plan_name` 
FROM
        (`table1` `t1`
        INNER JOIN `table2` `t2` ON ( (`t1`.`id` = `t2`.`table_1_id`) )        
        INNER JOIN `table3` `t3` ON ( (`t1`.`id` = `t3`.`table_1_id`) )        
        INNER JOIN `table4` `t4` ON ( (`t3`.`table_4_id ` = `t4`.`id`) )
        )

推荐阅读