【问题标题】:To INSERT a row into table from another table从另一个表向表中插入一行
【发布时间】:2018-12-05 02:11:50
【问题描述】:

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

CREATE TABLE SchoolYearTeachingDays (
    aDate DATE PRIMARY KEY
                UNIQUE
);

我用许多独特的日期填满了它。这些日期不包括星期日和星期六的日期。 我还有另一个,“TeachingSaturdaysInSchoolYear”表:

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

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

最好的朋友

【问题讨论】:

    标签: sqlite select insert


    【解决方案1】:
    1. 您在表 SchoolYearTeachingDays 中插入重复值违反了唯一约束。

    2. 要修复错误,请设置一个 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 表中的日期之一插入 SchoolYearTeachingDays 表?
    • 您正在使用 select 语句批量插入值,该语句直接插入您从 TeachingSaturdaysInSchoolYear 表中获得的任何内容。由于 SchoolYearTeachingDays 具有唯一日期,因此批量插入会在您的选择查询中遇到重复值时失败
    • 您正在使用 select 语句批量插入值,该语句直接插入您从 TeachingSaturdaysInSchoolYear 表中获得的任何内容。 为了更好地理解这句话,我必须再次问:当使用 select 批量插入时语句,在这个例子中,要从第一个表中插入一条记录到第二个表中多少次?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2018-08-01
    • 2017-08-01
    相关资源
    最近更新 更多