Создать таблицу MySQL из нескольких таблиц mySQL; складывая одинаковые столбцы и добавляя varchars - PullRequest
0 голосов
/ 03 мая 2011

У меня есть более экзотический оператор SQL, который я пытаюсь выполнить, который «объединяет» 3 таблицы в виде продукта и объединяет одинаковые столбцы.

Я максимально упростил это. Скажем, я сделал три таблицы как таковые, которые затем будут объединены в table_d:

mysql>select * from table_a;
Code  Goat Dog Cat
A 4 5 6
B 7 8 9
C 10 11 12

mysql>select * from table_b;
Code  Goat Dog Cat
D 1 2 3
E 4 5 6
F 7 8 9

mysql>select * from table_c;
Code  Goat Dog Cat Bird
T 1 1 1 2
Y 2 2 2 3
U 3 3 3 4

SQL-оператор создания таблицы, в соответствии с «create table table_d as (select ...», затем создает таблицу, как показано ниже.

Здесь столбцы с одинаковыми именами добавляются вместе, в то время как поле Код создается как объединенная строка. Однако я не знаю, как это сделать.

1010 * Таким образом *

mysql>select * from table_d;
Code  Goat Dog Cat Bird
ADT 6 8 10 2
ADY 7 9 11 3
ADU 8 10 12 4
BDT 9 11 13 2  
BDY .....
....
....
CFU 20 22 24 4

На этом этапе очень ценятся любые советы или помощь. Это также будет выполнено для более чем 3 таблиц одновременно, но я показал только 3 здесь для простоты. Спасибо!

Код вставки SQL :::

create table table_a(code varchar(1),goat integer, dog integer, cat integer);
create table table_b(code varchar(1),goat integer, dog integer, cat integer);
create table table_c(code varchar(1),goat integer, dog integer, cat integer, bird integer);
insert into table_a values('A','4','5','6');
insert into table_a values('B','7','8','9');
insert into table_a values('C','10','11','12');
insert into table_b values('D','1','2','3');
insert into table_b values('E','4','5','6');
insert into table_b values('F','7','8','9');
insert into table_c values('T','1','1','1','2');
insert into table_c values('Y','2','2','2','3');
insert into table_c values('U','3','3','3','4');

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

Возможно, у вас возникли проблемы, потому что ваша схема столбцов варьируется от таблицы к таблице в многораздельном наборе данных.Реляционные БД действительно предпочитают строки столбцам, когда структура колеблется.А как насчет более ориентированной на строки модели, такой как:

mysql>select * from table_a;
Code Type Number
A Goat 4
A Dog 5
A Cat 6
B Goat 7
B Dog 8
B Cat 9
C Goat 10
C Dog 11
C Cat 12

Если вы объедините таблицы вместе с собой несколько раз, вы сможете использовать агрегатные функции SUM () для подсчета, а не вычисляемые столбцы.

0 голосов
/ 03 мая 2011

Попробуйте это:

CREATE TABLE table_d
SELECT CONCAT(a.code, b.code, c.code) AS CODE, (a.goat + b.goat + c.goat) AS goat, (a.dog + b.dog + c.dog) AS dog, (a.cat + b.cat + c.cat) AS cat
FROM table_a a
JOIN table_b b
JOIN table_c c
ORDER BY CODE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...