sqlite3 ВСТАВИТЬ В ОБЪЕДИНЕНИЕ ВЫБРАТЬ

#sql #sqlite #select #insert

Вопрос:

 INSERT INTO table1
    SELECT "hello" AS field1, 15 AS field2, 1262340000 AS timestamp 
    UNION 
    SELECT "byebye", 10, 1262340000 
    UNION 
    SELECT "hi", 20, 1262340000 
    UNION 
    SELECT "boo", 25, 1262340000 
 

Столбцы таблицы:

 field1  field2  timestamp   pk
 

pk является ли автоматически увеличивающийся первичный ключ

При выполнении этого SQL возникает ошибка

Ошибка БД: 1 «таблица table1 содержит 4 столбца, но было предоставлено 3 значения»

Ответ №1:

Вы должны явно указать, на какие столбцы в table1 вашей вставке ориентирована:

 INSERT INTO table1 (field1, field2, timestamp)
SELECT 'hello', 15, 1262340000
UNION ALL
SELECT 'byebye', 10, 1262340000
UNION ALL
SELECT 'hi', 20, 1262340000
UNION ALL
SELECT 'boo', 25, 1262340000;
 

Если вы полностью опустите список выбора, SQLite вернется к ожиданию значений для всех столбцов таблицы в точном порядке, указанном в определении таблицы. В вашем случае, поскольку вы указали значения только для 3 из 4 общих столбцов, вы получаете ошибку. Обратите внимание, что вы также могли бы использовать VALUES здесь:

 INSERT INTO table1 (field1, field2, timestamp)
VALUES
    ('hello',  15, 1262340000),
    ('byebye', 10, 1262340000),
    ('hi',     20, 1262340000),
    ('boo',    25, 1262340000);
 

Комментарии:

1. ВСТАВЬТЕ В таблицу 1 (поле 1, поле 2, метка времени) ВЫБЕРИТЕ это нормально ,спасибо!