假设我有一个名为 category
的表我有 2 列 cat_id
和 cat_name
表格是这样的
cat_id cat_name
1 Science
2 Arts
我有另一个名为 item
的表, 其中cat_id
的 category
表是外键,表看起来像
item_id item_name cat_id
1 math 1
2 literature 2
3 physics 1
现在,如果我在 Science
中再次插入数学运算,我想编写这样的查询然后它不会插入,但如果我想在 Arts
中插入数学然后它会成功插入。请记住,我只有 item_name
和 cat_name
在我手中,我想添加 item_name
和 cat_id
其中cat_name
在项目表中。
到目前为止我是这样的
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)
但这给了我尴尬的结果,任何人都可以帮忙吗?
最佳答案
你基本上没有意识到这只是一个 normalization问题。当您尝试在同一张表中两次插入“math”时,这一点就变得很明显了。这是多对多的关系,而不是一对多的关系。经验法则:多对多关系总是生成一个表。
适当的表结构如下所示(包括示例数据):
类别:(cat_id)
cat_id cat_name
1 Science
2 Arts
项目:(item_id)
item_id item_name
1 math
2 literature
3 physics
Categories_Items(cat_id、item_id)
cat_id item_id
1 1
1 3
2 2
在圆括号中,您会看到主键。请记住,最后一张表有一个复合 PK。这样您就不会为同一类别重复数学运算。
关于mysql - 如果数据不保留在 sqlite 中特定外键的表中,如何在列中添加数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474282/