2012-06-21 2 views
-1

вот мой вопрос:Mysql вставить массив из другой таблицы и заполнить остальные значения по умолчанию

У меня есть таблица TRUST(id INT, trustlevel INT) которая содержит записи (1, 5) и (2, 3). У меня также есть массив, содержащий идентификаторы (1, 2, 3, 4, 5).

Что я хочу достичь, так это вставить все идентификаторы из массива во временную таблицу с именем PRESELECTED(id INT, trustlevel INT DEFAULT 10) таким образом, чтобы идентификаторы с доверительными уровнями, которые в TRUST должны быть скопированы, а остальная часть массива принимает значение по умолчанию значение которого в этом случае равно 10. Поэтому в конце PRESELECTED будут записаны записи (1, 5), (2, 3), (3, 10), (4, 10), (5, 10).

Я понял, как поместить значения из таблицы TRUST, но я застрял с остальными:

CREATE TEMPORARY TABLE PRESELECTED (id INT, trustlevel INT DEFAULT 10); 

INSERT INTO PRESELECTED (
    SELECT * FROM TRUST WHERE id IN (1, 2, 3, 4, 5) 
) 

Проблема с этим состоит в том, что она вставляет только 1 и 2, так как 3, 4 и 5 не находятся в TRUST

Любые быстрые предложения?

ответ

1
  1. Добавить уникальный ключ на ID (PK или UNIQUE KEY)

  2. Вставьте существующие идентификаторы из TRUST первые

    INSERT INTO PRESELECTED SELECT id,trustlevel FROM TRUST WHERE id IN(1,2,3,4,5);

  3. Заполните недостающие идентификаторы

    INSERT IGNORE INTO PRESELECTED (id) VALUES (1),(2),(3),(4),(5);

+0

Я думал о том, чтобы сделать то же самое, но с вставкой массива по умолчанию, а затем перезаписав значения, в которых будет соответствовать ключ. – laidback

+0

Спасибо, здорово, что есть способ игнорировать уже вставленные значения, это очень помогает! – ziGi

+0

@laidback ваш метод медленнее, если есть больше записей. – ziGi

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