如何通过引用我在 SQL 中创建的另一个表中的列来将数据插入到我创建的一个表中?

问题描述 投票:0回答:2

我创建了两个表,animation_companies 和cartoon_characters。我收到了一份“文档来模拟主管的请求,将信息插入我创建的数据库中。数据如下:

Animation_Companies 表将仅包含这三 (3) 条记录:

Warner Bros.
Disney
Nickelodeon

Cartoon_Characters 表将仅包含十四 (14) 条记录,其中包含卡通名称、创建年份以及拥有该卡通的公司。

“Warner Bros.”、“Disney”和“Nickelodeon”公司仅用于展示目的。必须从 Animation_Companies 表引用它。

|Cartoon Name   |Creation Year  |Company
| ------------- | ------------- |----------- |
|Porky Pig      |1935           |Warner Bros.|
|Daffy Duck     |1937           |Warner Bros.|
|Elmer Fudd     |1937           |Warner Bros.|
|Bugs Bunny     |1940           |Warner Bros.|
|Foghorn Leghorn|1946           |Warner Bros.|
|Mickey Mouse   |1928           |Disney      |
|Goofy          |1934           |Disney      |
|Donald Duck    |1931           |Disney      |
|Elsa of Arendelle|2013         |Disney      |
|Anna of Arendelle|2013         |Disney      |
|Doug Funnie    |1991           |Nickelodeon |
|Arnold Shortman|1985           |Nickelodeon |
|Tommy Pickles  |1991           |Nickelodeon |
|Aang           |2005           |Nickelodeon |

表animation_companies是使用以下语句创建的:

CREATE TABLE Animation_Companies 
(
 CompanyID INT PRIMARY KEY AUTO_INCREMENT, 
 CompanyName VARCHAR(100) NOT NULL 
); 

The table cartoon_characters was created using this statement:

CREATE TABLE Cartoon_Characters 
(
  cartoonID INT PRIMARY KEY AUTO_INCREMENT, 
  cartoonName VARCHAR(100) NOT NULL, 
  yearCreated INT,        
  OwningCompany INT NOT NULL, 
  CompanyID INT NOT NULL, 
    CONSTRAINT Cartoon_Characters_fk_Animation_Companies 
    FOREIGN KEY (CompanyID) REFERENCES Animation_Companies (CompanyID)
);

我已使用以下方法将数据插入到animation_companies 的记录中:

INSERT INTO animation_companies(CompanyName) 
VALUES ('Warner Bros.'), ('Disney'), ('Nickelodeon');

我提出的问题如下:

“将数据插入Cartoon_Characters表中:

不使用列列表,编写语句插入卡通名称、创建年份以及所属公司。

备注:

将字符串用单引号引起来 注意你的间距 自动递增值使用 DEFAULT 公司由整数 ID 引用”

这个说法是我尝试过的:

INSERT INTO cartoon_characters
VALUES (DEFAULT, 'Porky Pig', 1935, 'Warner Bros.', 1),
       (DEFAULT, 'Daffy Duck', 1937, 'Warner Bros.', 1),
       (DEFAULT, 'Elmer Fudd', 1937, 'Warner Bros.', 1),
       (DEFAULT, 'Bugs Bunny', 1940, 'Warner Bros.', 1), 
       (DEFAULT, 'Foghorn Leghorn', 1946, 'Warner Bros.', 1),
       (DEFAULT, 'Mickey Mouse', 1928, 'Disney', 2),
       (DEFAULT, 'Goofy', 1934, 'Disney', 2),
       (DEFAULT, 'Donald Duck', 1931, 'Disney', 2),
       (DEFAULT, 'Elsa of Arendelle', 2013, 'Disney', 2),
       (DEFAULT, 'Anna of Arendelle', 2013, 'Disney', 2),
       (DEFAULT, 'Doug Funnie', 1991, 'Nickelodeon', 3),
       (DEFAULT, 'Arnold Shortman', 1985, 'Nickelodeon', 3),
       (DEFAULT, 'Tommy Pickles', 1991, 'Nickelodeon', 3),
       (DEFAULT, 'Aang' 2005, 'Nickelodeon', 3);
sql mysql database sql-insert
2个回答
0
投票

一种方法是先将数据插入到临时表中。

INSERT INTO #SomeTempTable
VALUES ('Porky Pig', 1935, 'Warner Bros.', 'Warner Bros');

然后你

JOIN
它到
Animation_Companies
桌子

INSERT INTO cartoon_characters(cartoonName, YearCreated, OwningCompany, CompanyId)
SELECT t.cartoonName, t.YearCreated, t.OwningCompany, a.CompanyId
FROM #SomeTempTable t
JOIN Animation_Companies a ON a.CompanyName = t.CompanyName

0
投票

2个错误

  1. 最后插入 DEFAULT, 'Aang' 2005, 'Nickelodeon', 3) 缺少 “Aang”后面加逗号
  2. 拥有的公司名称在cartoon_characters表中是int,但是你 正在传递一个会引发错误的字符串。这是多余的,可以丢弃。您可以使用 join 在选择中获取名称。

表名(和列名)也要保持一致,以防遇到区分大小写的问题。

否则你的插入是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.