仅在MariaDB中不存在具有非唯一外键的行时插入

3xiyfsfu  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(128)

我有一张A桌
| 标识符|字段|
| - -|- -|
| 一个|值A|
| 2个|值B|
| 一个人。|一个人。|
以及参考表A的表B
| 标识符|fk_表格_a|字段_a|字段_b|一个人。|
| - -|- -|- -|- -|- -|
| 一个|一个|一个人。|一个人。|一个人。|
| 2个|2个|一个人。|一个人。|一个人。|
| 一个人。|一个人。|一个人。|一个人。|一个人。|
我想在表B中插入一些内容,前提是它还没有任何引用A的数据集(通过fk_table_a)
不幸的是,外键fk_table_a不是唯一的,我不能改变这个事实,所以它是潜在的可能插入另一个条目与相同的外键。但我不希望在我的情况下。
我使用INSERT INTO... SELECT语句将一大堆行插入到表B中...此语句的select语句的范围稍大一些,但看起来如下所示

INSERT INTO table_b (fk_table_a, field_a, field_b, ...)
   SELECT ot1.id_table_a, ot2.field_a, ot3.field_b
   FROM other_table_1 ot1, 
   JOIN other_table_2 ot2 ...
   JOIN other_table_3 ot3 ...
   ....

# only insert the current dataset if it ot1.id_table_a doesnt exist already in table_b!

因此,对于select中的任何数据集,如果已经有一个数据集具有相同的fk_table_a,我不希望在table_b中有一个条目...
有什么想法吗?

egmofgnx

egmofgnx1#

添加一个WHERE子句来检查other_table_1中是否不存在该id可能会解决问题。

INSERT INTO table_b (fk_table_a, field_a, field_b, ...)
  SELECT ot1.id_table_a, ot2.field_a, ot3.field_b
  FROM other_table_1 ot1, 
     JOIN other_table_2 ot2 ...
     JOIN other_table_3 ot3 ...
  WHERE ot1.id_table_a NOT IN (SELECT fk_table_a FROM table_b)

相关问题