MySQL INSERT 具有多个 SELECTS,返回列数不同

标签 mysql sql sql-insert

我正在尝试将多个不同表中的多个值插入表中。这是一个简单的示例(实际上这几乎没有用,但如果我发布完整的查询,理解起来会更复杂):

CREATE TABLE person (
    id INT PRIMARY KEY,
    lastName VARCHAR(100),
    firstName VARCHAR(50),
    dob DATE,
    telNo VARCHAR(20)
);

CREATE TABLE postcode (
    id INT PRIMARY KEY,
    postcode VARCHAR(10),
);

CREATE TABLE name (
    id INT PRIMARY KEY,
    lastName VARCHAR(100),
    firstName VARCHAR(50)
);


INSERT INTO postcode VALUES(21, "DN3 1SU");
INSERT INTO name VALUES(21, "Smith", "John"); 

INSERT INTO person (id, lastName, firstName, dob, telNo) VALUES (
    (SELECT id FROM postcode WHERE postcode="DN3 1SU"),
    (SELECT lastName, firstName FROM name WHERE id=21),
    "1991-12-20",
    "075935678923"
);

我基本上试图根据其他表中的数据(其中我从每个表中获取的列数不同)和一些文字值在表中构造一个新行。

使用我当前使用的方法,VALUES 不接受第二个 SELECT 语句,因为它提供两列,而不是一列。

最佳答案

只需使用INSERT ... SELECT附加查询即可:

INSERT INTO `person` (id, lastName, firstName, dob, telNo)
SELECT p.id, n.lastName, n.firstName, '1991-12-20', '075935678923'
FROM `postcode` p
INNER JOIN `name` n ON p.id = n.id AND n.id = 21
WHERE p.postcode = 'DN3 1SU'

关于MySQL INSERT 具有多个 SELECTS,返回列数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47464078/

相关文章:

如果连接表中的其中一行不匹配条件,则 Mysql 将排除整行

MySQL:并发插入

sql - 从临时表插入表

mysql - 如何在mysql中使用存储过程将记录从一个表保存到另一个表?

php - 如何初始化 PHP GET 变量以避免 PHP 未定义索引通知

php - 如果条件不起作用则嵌套

mysql - 使用 except 子句的 SQL

python - 如何修复Python中的 'TypeError: expecting string or bytes object'错误

mysql - 简单的 SQL 查询工作台

sql - 使用从其他表上插入返回的 id 更新表