Sqlite 从另一个表向表中插入行的步骤

Sqlite 从另一个表向表中插入行的步骤,sqlite,select,insert,Sqlite,Select,Insert,我的“SchoolYearTeachingDays”表只有一列,其中有日期: CREATE TABLE SchoolYearTeachingDays ( aDate DATE PRIMARY KEY UNIQUE ); 我在里面填了很多独一无二的日期。这些日期不包括星期日和星期六的日期。 我还有另一张“学年教学自然日”表: CREATE TABLE TeachingSaturdaysInSchoolYear ( id INT

我的“SchoolYearTeachingDays”表只有一列,其中有日期:

CREATE TABLE SchoolYearTeachingDays (
    aDate DATE PRIMARY KEY
                UNIQUE
);
我在里面填了很多独一无二的日期。这些日期不包括星期日和星期六的日期。 我还有另一张“学年教学自然日”表:

CREATE TABLE TeachingSaturdaysInSchoolYear (
    id            INT  PRIMARY KEY
                       UNIQUE,
    aDate      DATE,
    TimetableForTheDay TEXT
);
这张桌子上只有两个日期。这两个日期是两个星期六。这两个星期六我们得教学生。 当我对该表执行以下查询时,我得到以下两条记录:

2018-04-14

2018-05-05

我想将这两个日期从'TeachingSaturdaysInSchoolYear'表插入'SchoolYearTeachingDays'表中

我正在尝试此查询:

INSERT INTO SchoolYearTeachingDays
 SELECT aDate FROM TeachingSaturdaysInSchoolYear
;
但我得到了这个错误: 错误:唯一约束失败:SchoolYearTeachingDays.aDate

我的这个查询是如何工作的,为什么会出现这个错误?我如何实现我的目标

最好的,朋友

  • 将重复的值插入表SchoolYearTeachingDays,违反了唯一约束

  • 要修复此错误,请将not in条件设置为,以便已插入的日期不会再次插入到SchoolYearTeachingDays表中

  • 例如

    INSERT INTO SchoolYearTeachingDays
     SELECT aDate FROM TeachingSaturdaysInSchoolYear T WHERE T.aDate NOT IN (SELECT S.aDate FROM SchoolYearTeachingDays S)
    

    非常感谢@Raxit!我仍然不明白
    SELECT
    在我的查询中是如何工作的,所以它违反了唯一约束?有多少次希望将SELECT查询(从TeachingSaturdaysInSchoolYear表插入SchoolYear TeachingDays表的日期之一)插入SchoolYear TeachingDays表?您正在使用SELECT语句批量插入值,该语句直接插入从TeachingSaturdaysInSchoolYear表中获得的任何内容。由于学年教学日期具有唯一的日期,因此批量插入在遇到select查询中的重复值时失败。您正在使用select语句批量插入值,该语句直接插入学年表中从教学日期中获得的任何内容。为了更好地理解这句话,我必须再次问:在本例中,当使用select语句进行批量插入时,有多少次希望将第一个表中的一条记录插入第二个表?