插入从内部联接查询派生的数据时出错

Error inserting data derived from Inner Join query

我正在尝试查询 MySQL 数据库以 INSERTINNER JOIN 导出的输出到空白的第三个 table。结构如下:

Table A:firstName VARCHAR(100),lastName VARCHAR(100)
Table B:firstName VARCHAR( 100), lastName VARCHAR(100), extension VARCHAR(5)
Table C: firstName VARCHAR(100), lastName VARCHAR (100), extension VARCHAR(5)

Table A 有名称列表,我需要匹配 Table B 中的扩展名。Table B 有名称和扩展名,但我只需要其中的某个子集名称和扩展名(与 Table A 中的名字和姓氏匹配的名称)。

我能够 运行 成功进行以下查询;但是,我不确定我是否相信 42 行的输出:

SELECT ta.extension, da.firstName, da.lastName
FROM <tableB> AS ta
INNER JOIN <tableA> AS da
ON (ta.firstName=da.firstName)
INNER JOIN <tableA> AS dl
ON (ta.lastName=dl.lastName)
ORDER BY da.firstName;

此查询有效,但同样,我不能肯定它为我提供了 100% 准确的结果(我担心可能会遗漏一些结果,最重要的是)。

以下查询不起作用:

INSERT INTO <tableC>
SELECT ta.extension, da.firstName, da.lastName
FROM <tableB> AS ta
INNER JOIN <tableA> AS da
ON (ta.firstName=da.firstName)
INNER JOIN <tableA> AS dl
ON (ta.lastName=dl.lastName)
ORDER BY da.firstName;

第二次查询returns出现如下错误:

ERROR 1406 (22001): Data too long for column 'extension' at row 88

我查了一下,发现 table 可以包含长数据类型的行数有一个硬性最大值 - 这就是为什么我将 table 列修改为是 VARCHAR(100),低于 VARCHAR(255)

有什么想法吗?

您将加入 Table A 两次。您应该只执行一次,这样您就可以从 Table B 中获取过滤后的记录,这些记录具有来自 Table A

中的相应记录
SELECT ta.extension, da.firstName, da.lastName
    FROM <tableB> AS ta
    INNER JOIN <tableA> AS da ON ta.firstName = da.firstName AND ta.lastName = da.lastName
    ORDER BY da.firstName;

对于ERROR 1406 (22001): Data too long for column 'extension' at row 88错误,是的,它与值的length有关。请向我们展示您的 table 在修改之前的原始架构。

更新 1

如果您问题中的 table 模式顺序正确,SELECT 语句中的记录将根据列的顺序插入到 table 中。该错误是由于将 LastName 插入 Extension 列引起的。

从 table 架构中,您有 firstNamelastNameextension 然后在 SELECT 语句中,我们应该遵循相同的顺序:

INSERT INTO <tableC>
SELECT da.firstName, da.lastName, ta.extension
        FROM ...

另一种选择是在 INSERT INTO 语句中指定列名

INSERT INTO <tableC> (Extension, FirstName, LastName)
SELECT ta.extension, da.firstName, da.lastName
        FROM ...