我的问题似乎很简单,但不幸的是我找不到任何令人满意的答案。
请查看以下示例:
表格Author
定义作者,Document
至少有一位作者和表格Authors
对文档所有作者进行分组。
我的问题是:每次插入文档时,我都需要验证我的作者组是否已存在于作者表上。
最好的方法是什么?
我想首先我需要验证这个组是否已经存在然后,我应该获得该id(如果已经存在)或者在Authors
上生成新记录(如果组不存在)。 / p>
问题:
这是否应该在具有多对多的表的情况下发生的正确逻辑过程?
如何检查表Authors中是否已存在一组值?
像select * from Authors where a_id IN(1,2,3)
这样的东西,但是以独有的方式。 :S
任何帮助都会很棒。
由于
答案 0 :(得分:1)
我宁愿选择三个表格的解决方案:
Author
Document
rel_author_document
rel_author_document
的结构如下:
author_fk
document_fk
您不需要添加新组,只需将作者与文档相关联即可。
在rel_author_document
中,您甚至可以添加其他列,例如role
,如果您需要这样的话。
通过这种方法,你可以拥有两个同一组作者的文件,但这不会杀死你的表演。
如果你的问题是家庭作业,你就不能改变表格结构:
查询作者表以查看您在where条件中是否有一组具有相同编号的author_id的作者,如:
选择count(1)cnt 来自作者 其中a_id IN(1,2,3)
如果cnt
与author_id
的数量不同,则插入新组
如果cnt
相等,则获取该组作者的ID:
select ID
from Authors
where a_id = 1
or a_id = 2
or a_id = 3
group by 1
having count(1) = 3
答案 1 :(得分:0)
如果是"多对多"关系我相信你正在寻找的表结构是:
作者( 援助, 名称, 生日, 域)
文件( D_ID, 抽象, 年)
Auth_Doc( 援助, D_ID )
在检查是否已有一组作者方面,这取决于您如何显示数据。如果我上传文档并且我想检查是否存在一组作者,我会执行以下操作:
假设您的数据存储为:
a_id |名称
1 |约翰,杰克,鲍勃
SELECT * FROM Author WHERE name like '%john%'
我希望这有帮助,
苏海尔