2016-08-04 3 views
1

я получал Код ошибки: 1060.:Ошибка: 1060. Дубликат имя столбца

  • Дубликат имя столбца 'NULL'
  • Дубликат имя столбца «2016-08-04 01: 25:06'
  • Дубликат имя столбца „джон“

Однако мне нужно вставить некоторое поле с тем же значением, но SQL отказывает и показывать вышеуказанную ошибку. Вероятно, ошибка sql не может выбрать одно и то же имя столбца, в этом случае есть другой способ написания кода? Ниже мой текущий код

INSERT INTO test.testTable SELECT * 
FROM (SELECT NULL, 'hello', 'john', '2016-08-04 01:25:06', 'john' 
, '2016-08-04 01:25:06', NULL, NULL) AS tmp 
WHERE NOT EXISTS (SELECT * FROM test.testTable WHERE message= 'hello' AND created_by = 'john') LIMIT 1 

Моя колонка:

  • (идентификатор, сообщение, CREATED_BY, created_date, updated_by, updated_date, deleted_by, deleted_date)

Пожалуйста помогите, спасибо.

ответ

1

Ваши дублированные имена столбцов поступают из вашего подзапроса. Вы выбираете null, john и 2016-08-04 01:25:06 несколько раз. Укажите столбцы, которые вы выбираете с названиями/псевдонимами:

INSERT INTO test.testTable 
SELECT * 
FROM (SELECT NULL as col1, 'hello' as col2, 
     'john' as col3, '2016-08-04 01:25:06' as col4, 
     'john' as col5, '2016-08-04 01:25:06' as col6, 
     NULL as col7, NULL as col8) AS tmp 
WHERE NOT EXISTS (SELECT * 
        FROM test.testTable 
        WHERE message= 'hello' AND created_by = 'john') 
LIMIT 1 

limit 1 Не уверен, что полезно здесь, вы только выбрать одну строку потенциально вставить.

+0

Привет, спасибо большое, проблема решена – nicker

+0

@nicker - рада помочь – sgeddes

1

Вы используете подзапрос. Поскольку вы не даете псевдонимы столбцов, MySQL должен выбрать для вас псевдонимы - и он выбирает формулы, используемые для определения.

Вы можете написать запрос без подзапроса:

INSERT INTO test.testTable(. . .) 
    SELECT NULL, 'hello', 'john', '2016-08-04 01:25:06', 'john', 
      '2016-08-04 01:25:06', NULL, NULL 
    FROM dual 
    WHERE NOT EXISTS (SELECT 1 
         FROM test.testTable tt 
         WHERE tt.message = 'hello' AND tt.created_by = 'john' 
        ); 

Если вы используете подзапрос в SELECT, а затем использовать корреляционные положения в WHERE подзапроса:

INSERT INTO test.testTable(. . .) 
    SELECT * 
    FROM (SELECT NULL as col1, 'hello' as message, 'john' as created_by, 
       '2016-08-04 01:25:06' as date, 'john' as col2, 
       '2016-08-04 01:25:06' as col3, NULL as col4, NULL as col5 
     ) t 
    WHERE NOT EXISTS (SELECT 1 
         FROM test.testTable tt 
         WHERE tt.message = t.message AND 
          tt.created_by = t.created_by 
        ); 

Кроме того, LIMIT 1 ничего не делает, потому что у вас есть только одна строка.

+0

Привет, спасибо за указание и решение. большое спасибо – nicker

Смежные вопросы