Как добавить данные из разных таблиц в одну новую таблицу в mySQL? - PullRequest
0 голосов
/ 15 апреля 2020
CREATE TABLE CU_ORDER

( cordernumber INT PRIMARY KEY, 
fname_lname VARCHAR(50) NOT NULL,
product_name VARCHAR(100) NOT NULL,
  );

CREATE TABLE TRACKING_NUMBER
    ( trnumber INT PRIMARY KEY
    );

INSERT INTO CU_ORDER VALUES(456, 'John Doe' , Table);
INSERT INTO TRACKING_NUMBER(276734673);

Я пытаюсь создать таблицу с именем Package, и в ней будут все элементы из cu_order и все элементы из tracking_number. Как я буду добавлять все атрибуты этой таблицы в одну таблицу. Что я делаю не так?

CREATE TABLE PACKAGE
( orderno INT PRIMARY KEY, 
fname VARCHAR(50) NOT NULL,
name VARCHAR(100) NOT NULL,
trno INT PRIMARY KEY);

INSERT INTO PACKAGE (........

Ответы [ 2 ]

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

Вы можете создать новую таблицу из данных другой таблицы (или нескольких таблиц), добавив оператор SELECT в оператор CREATE TABLE.

Однако в ваших двух исходных таблицах отсутствует отношение 1: 1, позволяющее это сработать, что, как я полагаю, является внутренним номером CU_ORDER. Похоже, что в таблице TRACKING_NUMBER отсутствует столбец 'cordernumber'.

CREATE TABLE TRACKING_NUMBER (
   trnumber INT PRIMARY KEY,
   cordernumber INT
);

После добавления столбца 'cordernumber' в TRACKING_NUMBER вы можете создать новую таблицу PACKAGE с помощью:

CREATE TABLE PACKAGE (
    orderno INT PRIMARY KEY,
    fname VARCHAR(50) NOT NULL,
    name VARCHAR(100) NOT NULL,
    trno INT PRIMARY KEY
) 
SELECT
    CU_ORDER.cordernumber AS orderno,
    CU_ORDER.fname_lname AS fname,
    CU_ORDER.product_name AS name,
    TRACKING_NUMBER.trnumber AS trno
FROM CU_ORDER, TRACKING_NUMBER
WHERE CU_ORDER.cordernumber=TRACKING_NUMBER.cordernumber;
0 голосов
/ 15 апреля 2020

Кажется, что две таблицы не имеют отношения, поэтому предположительно , вы хотите получить декартово произведение обеих таблиц. Если это так, вы можете использовать синтаксис insert ... select ... с cross join:

insert into package(orderno, fname, name, trno)
select
    co.cordernumber,
    co.fname_lname,
    co.product_name,
    tn.trnumber 
from cu_order co
cross join tracking_number tn

. При этом будут вставлены все возможные комбинации строк из обеих исходных таблиц в целевой таблице.

Вам следует также исправьте объявление таблицы package: у вас есть два первичных ключа, что недопустимо. Вместо этого вам, вероятно, нужен составной первичный ключ, состоящий из обоих столбцов:

create table package ( 
    orderno int, 
    fname varchar(50) not null, 
    name varchar(100) not null, 
    trno int,
    primary key(orderno, trno)
);
...