首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sql检查插入前是否存在not记录

sql检查插入前是否存在not记录
EN

Stack Overflow用户
提问于 2014-07-08 19:29:00
回答 2查看 2.6K关注 0票数 0

我有三个表,它们的列完全相同

表:A(时间表)

代码语言:javascript
运行
复制
 id          Date        From             TO
----------- ----------  ---------------- ----------------
1           2014-04-10  08:00:00         09:00:00
2           2014-04-10  09:10:00         10:10:00
3           2014-04-10  14:00:00         15:00:00
4           2014-04-10  08:30:00         09:30:00
5           2014-04-12  18:00:00         19:00:00

表:B(组)

代码语言:javascript
运行
复制
ID          Name
----------- ----------
1           name_1
2           name_2
3           name_3

表:C (Join)

代码语言:javascript
运行
复制
ID          GroupID     ScheduleID
----------- ----------- -----------
1           1           1
2           1           2
3           1           3

我想知道如果表C中的from和to (Time)预览记录之间不存在表A.from,如何将表A中的第4条记录插入到表C中。

EN

回答 2

Stack Overflow用户

发布于 2014-07-08 19:33:03

我不确定您定义的是什么标准:insert 4th record from table A into table C if it does not exist table A.[from] between from and to preview records是,但检查是否存在某些内容的默认语句如下。

代码语言:javascript
运行
复制
INSERT INTO C
SELECT * FROM A 
WHERE NOT EXISTS(SELECT 1 FROM A WHERE A.ID = C.ID)
票数 0
EN

Stack Overflow用户

发布于 2014-07-08 20:27:39

在我看来,这些表的设计目的是做以下事情:

  • Table A保存日程安排信息。因此,Schedule 1似乎表示在4月的上午8点到9点之间安排了某项任务,B根据表A.
  • Table中保存的信息保存要计划的各个组的名称。C是将组映射到计划的intersection table

理想情况下,每个表中的ID列应该是一个自动递增的唯一主键。这将使您能够将新记录插入到表C中,而无需首先检查ID为4的记录是否已经存在。

至于实际的INSERT语句,INSERT INTO C SELECT .. FROM A将不起作用,因为表A和表C中的列不匹配。

您尝试将哪个组分配给日程安排?如果是name_1,您可以使用以下语句。

代码语言:javascript
运行
复制
INSERT INTO C
SELECT 4, 1, 4
WHERE NOT EXISTS(SELECT 1 FROM C WHERE ID = 4)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24630661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档