如何在 MySQL 中插入没有主键的 2 个表的记录?

How to insert records from 2 tables without the primary key in MySQL?

如何在 MySQL 中从 2 个没有主键的表中插入记录?

我想在下面插入 table_a sql:

insert into table_a select 
tc.id, tc.code,tb.name,tb.sordid,tb.others
from table_b tb 
left join table_c tc
on sb.code = spir.code

但是SQL上面会报主键错误(table_c.id = table_a.id是主键),我只能用SQL[=17下面=]

insert into table_a select 
tc.id, tc.code,tb.name,tb.sordid,tb.others
from table_b tb 
left join table_c tc
on sb.code = spir.code where tc.id is not null

table_a

id   code  name     sortid  others
-----------------------------------
1     abc  ASDAG     1      sfgsdf
1     abc   asgasd    2      asd
1     abc  asdgasd  3      sfgsdf
1     abc   asdgas    4      asd
2     ad  ASDAG     1      sfgsdf
2     ad   sd       2       asd
2     ad  sss       3     sfgsdf
3     adcs  ASDAG     1      sfgsdf
3     adcs   sd       2       asd

table_b

id   code  name     sortid  others
-----------------------------------
99     abc   asgasd    1      asd
99     abc  asdgasd    2      sfgsdf
6      ad  ASDAG       1      sfgsdf

table_c

id   code
----------
 1    abc
 2    ad
 3   adcs

但这不是我需要的,如果您需要一些示例数据,请随时告诉我,非常感谢您的任何进步。

MySQL 提供了两种方法来避免在这种情况下插入行:

insert into table_a
    select tc.id, tc.code,tc.name,tb.sordid,tb.others
    from table_b tb left join
         table_c tc
         on sb.code = spir.code
    where tc.id is not null
    on duplicate key update id = values(id);

注意:这通过不插入行来避免错误。我不确定那是不是你真正想要的。

您也可以使用insert ignore

您的 table_a 列似乎不允许在 id 字段中使用空值,因此无法在此处插入空值。

您需要执行以下任一操作:

  1. table_a.id
  2. 允许空值
  3. 在您的插入中添加一些翻译,以最终插入 id 字段的非空值。