【问题标题】:How to insert multiple rows of data using both SELECT and VALUES in SQL如何在 SQL 中同时使用 SELECT 和 VALUES 插入多行数据
【发布时间】:2020-04-06 19:02:49
【问题描述】:

我有两张表,一张是 Owner,一张是 Pet,而 Owner 持有 OwnerID 自动递增的整数。我需要在我的 Pet 表中选择 OwnerID,并为每个宠物名称/生日包含不同的值。

我试过了,但它只是为每一行复制了相同的宠物名称/生日。

INSERT INTO  Pet (OwnerID, PetName, DateOfBirth)
SELECT OwnerID, 'Luna', '2013-08-26T12:00:00+00:00'
FROM Owner;

我也试过这个:

INSERT INTO Pet (OwnerID, PetName, DateOfBirth)
VALUES (
(SELECT OwnerID, 'Luna', 2013-02-11 FROM Owner), 
(SELECT OwnerID, 'Wally', 2014-09-28 FROM Owner), 
(SELECT OwnerID, 'Bella', 2019-07-04 FROM Owner), 
(SELECT OwnerID, 'Milo', 2017-03-15 FROM Owner));

但是列数与第 1 行的值不匹配。

那么我怎样才能既选择 OwnerID 又为每一行创建唯一的 PetName 值呢?

【问题讨论】:

  • 您想为每个主人取一个不同的宠物名吗?
  • 这些选择都拉回了整个所有者表。您需要在这些选择上添加一个 where 子句才能使其有意义。它怎么知道哪个宠物和哪个主人一起去?
  • @JohnFx 如果我单独列出这些值,如何从 Owner 表中选择 OwnerID?
  • @Kevin 没错!每个 OwnerID 都有自己唯一的宠物名称
  • 为两个表提供CREATE TABLE脚本,为Owner中已经存在的数据提供INSERT INTO脚本,以及必须插入Pet的示例数据数组。不要忘记解释有关所有者是每只特定宠物的所有者的信息。

标签: mysql subquery mysql-workbench sql-insert


【解决方案1】:

我猜你只是想往表中插入数据?

那你必须指定每只宠物的主人是谁,就这么简单

INSERT INTO Pet (OwnerID, PetName, DateOfBirth)
VALUES (1, 'Luna', '2013-02-11'), 
(4, 'Wally', '2014-09-28'), 
(6, 'Bella', '2019-07-04'), 
(12, 'Milo', '2017-03-15');

当然,所有者必须在此之前存在。

【讨论】:

  • 首先添加所有者,例如INSERT INTO Owner(OwnerName) VALUES ('John Doe'), ('Joanne Doe);。这将触发自动增量。然后,您可以手动从所有者表中读取所有者 ID,或使用 INSERT INTO Pet (OwnerID, PetName, DateOfBirth) VALUES ((SELECT OwnerID FROM Owner WHERE OwnerName = 'John Doe'), 'Luna', '2013-02-11'), (SELECT OwnerID FROM Owner WHERE OwnerName = 'Joanne Doe'), 'Wally', '2014-09-28'); 之类的内容 - 只有在所有者表中没有重复名称时才有效。
猜你喜欢
  • 1970-01-01
  • 2015-09-20
  • 2014-01-15
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
相关资源
最近更新 更多