在插入之前,如果没有记录,则检查sql

时间:2014-07-08 11:29:00

标签: sql sql-server

我有三个表格具有完全相同的列

表:A(附表)

 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(组)

ID          Name
----------- ----------
1           name_1
2           name_2
3           name_3

表:C(加入)

ID          GroupID     ScheduleID
----------- ----------- -----------
1           1           1
2           1           2
3           1           3

我想知道如果表A中不存在表A,如何将表A中的第4条记录插入到表C中。[from]来自表格C中的(时间)预览记录。

2 个答案:

答案 0 :(得分:0)

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

INSERT INTO C
SELECT * FROM A 
WHERE NOT EXISTS(SELECT 1 FROM A WHERE A.ID = C.ID)

答案 1 :(得分:0)

对我而言,表格似乎是为了执行以下操作而设计的:

  • 表A 保存计划信息。因此,附表1似乎表明在4月10日上午8点到9点之间安排了一些事情。
  • 表B 包含根据表A中保存的信息安排的各种组的名称。
  • 表C 是将组映射到计划的intersection table

理想情况下,每个表中的ID列都是一个自动递增的唯一主键。这将使您能够在不检查ID为4的记录是否已存在的情况下将新记录插入表C中。

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

您要将哪个组分配给某个时间表?如果是name_1,则可以使用以下语句。

INSERT INTO C
SELECT 4, 1, 4
WHERE NOT EXISTS(SELECT 1 FROM C WHERE ID = 4)