table被指定两次作为INSERT的目标和单独的数据源

时间:2016-01-17 15:07:34

标签: mysql sql

我做了这个查询,但它给了我错误,就像在标题

中一样
INSERT INTO data_waktu_vaksinasi (id_binatang, id_vaksin, tanggal_vaksin, status_vaksin) VALUES 
    (1, 1, (SELECT DATE_ADD(max(tanggal_vaksin), INTERVAL 1 YEAR)) FROM data_waktu_vaksinasi, 'belum')

3 个答案:

答案 0 :(得分:4)

MySQL 确实允许同一个表用于inserts的源和目标。您只需要使用正确的语法:

INSERT INTO data_waktu_vaksinasi (id_binatang, id_vaksin, tanggal_vaksin, status_vaksin) 
     SELECT 1, 1, DATE_ADD(max(tanggal_vaksin), INTERVAL 1 YEAR), 'belum'
     FROM data_waktu_vaksinasi;

答案 1 :(得分:2)

将源表放在subquery中以解决此问题。 Mysql不允许在DML操作的

的源和目标中使用相同的表
INSERT INTO data_waktu_vaksinasi 
            (id_binatang, 
             id_vaksin, 
             tanggal_vaksin, 
             status_vaksin) 
SELECT 1, 
       1, 
       dt, 
       'belum' 
FROM   (SELECT Date_add(Max(tanggal_vaksin), interval 1 year) AS dt 
        FROM   data_waktu_vaksinasi)a 

答案 2 :(得分:1)

尝试此代码

INSERT INTO data_waktu_vaksinasi
(id_binatang, id_vaksin, tanggal_vaksin, status_vaksin)
VALUES
    (
        1,
        1,
        (
            SELECT date FROM
                (SELECT DATE_ADD(max(tanggal_vaksin), INTERVAL 1 YEAR) date
                 FROM data_waktu_vaksinasi, 'belum') subquery
        )
    )

我没有测试这个代码,但是测试了一个等效代码(也是一个带有相同表的INSERT INTO语句在子查询中,如在主查询中)

技巧

是带有相同表的子查询的 wrap 到另一个子查询中,它只查询实际子查询的SELECT - 子句中的列。

结果:Mysql没有抱怨

  

我不知道为什么会这样  在我看来kina喜欢作弊