создать представление, объединяющее несколько таблиц и другие отдельные таблицы в одну - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть эти таблицы ниже

table_1 [идентификатор (первичный ключ, AI), имя, фамилия]

table_2 [идентификатор (первичный ключ, AI), table_1_id, payment_type, address]

table_3 [идентификатор (первичный ключ, AI), table_1_id, table_4_id]

table_4 [идентификатор (первичный ключ, AI), номер_карты, имя_плана]

Что я пытаясь достичь

  1. объединить таблицу 1 и таблицу 2, где таблица 2 table_1_id = идентификатор таблицы 1
  2. объединить таблицу 3 и таблицу 4, где таблица 3 table_4_id = идентификатор таблицы 4 *
  3. объединение таблицы 3 и таблицы 4 с сохранением столбца таблицы 3 table_1_id
  4. объединение нового результата таблицы из объединения таблицы 3 и таблицы 4 с новым результатом таблицы из объединения таблиц 1 и 2 по таблице_1_id

ниже я попробовал

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`) )
        )

К сожалению, я не могу присоединиться к остальным, любая помощь очень ценится.

1 Ответ

0 голосов
/ 11 апреля 2020

Это объединит все таблицы и покажет все детали. Если у вас есть только отношения 1: 1, вы получите 1 строку на t1.id. Если у вас есть одна или несколько связей таблицы 1: n, вы получите еще n строк для идентификатора.

Таким образом, у вас тоже будет группа По данным со столбцами, которые в отношении 1: 1 относятся к t1.id, остальное вы должны использовать агрегатные функции.

, например, у вас есть 2 номера кредитных карт на t1 .id, вы должны решить, что будет отображаться: 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`) )
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...