Mysql 如果数据没有保留在sqlite中特定外键的表中,如何在列中添加数据

Mysql 如果数据没有保留在sqlite中特定外键的表中,如何在列中添加数据,mysql,sql,sqlite,Mysql,Sql,Sqlite,假设我有一个名为category的表,其中有两列cat\u id和cat\u name 这张桌子看起来像这样 cat_id cat_name 1 Science 2 Arts insert into item (item_name,cat_id) select 'abdul',category.cat_id from category where NOT EXISTS (select * from item WHERE category.cat_id = i

假设我有一个名为
category
的表,其中有两列
cat\u id
cat\u name

这张桌子看起来像这样

cat_id   cat_name
1         Science
2         Arts
insert into item (item_name,cat_id) select 'abdul',category.cat_id from category where NOT EXISTS (select * from item WHERE category.cat_id = item.foreign_id)
我有另一个名为
item
的表,其中
category
表的
cat\u id
是外键,该表如下所示

item_id       item_name    cat_id
1              math          1
2              literature    2
3              physics       1
现在我想写一个这样的查询,如果我在
科学
中再次插入数学,那么它不会插入,但是如果我想在
艺术
中插入数学,那么它会成功插入。请记住,我手中只有
item\u name
cat\u name
,我想在item表中添加
item\u name
和该
cat\u name
cat\u id

到目前为止我所做的就是这样

cat_id   cat_name
1         Science
2         Arts
insert into item (item_name,cat_id) select 'abdul',category.cat_id from category where NOT EXISTS (select * from item WHERE category.cat_id = item.foreign_id)

但是这个结果让我很尴尬,有人能帮忙吗?

你基本上没有意识到这只是一个问题。当您尝试在同一个表中插入两次“math”时,这一点变得很明显。这是一种多对多的关系,而不是一对多的关系。经验法则:多对多关系总是生成一个表

适当的表结构如下所示(包括示例数据):

类别:(类别id)

项目:(项目id)

分类项目(类别id、项目id)


在圆括号中,您将看到主键。请记住,最后一个表有一个复合PK。这将使您不必对同一类别重复计算。

那么它是MySQL还是SQLite?SQLite还是MySQL,如果您能帮助解决任何问题,请告诉我
cat_id       item_id
1              1
1              3
2              2