Вставить в таблицу столбец без дублей

146
18 февраля 2022, 16:40

Существует таблица:

id(int)     name      data
1           name1     12
2           name249   22
3           name855   99
4           name900   64
5           name600   28

В столбец "name" нужно вставить новый список имен из другой таблицы, но если в первой таблице имя уже существует, то дубли не вставлять.

Как правильно составить запрос?

Решение: Уникальный индекс name и INSERT IGNORE

INSERT IGNORE INTO `table` (`name`) SELECT `name` FROM `table2`
Answer 1

Вариант 1. Отсеять имеющиеся.

INSERT INTO table (name)
SELECT name
FROM othertable
WHERE NOT EXISTS ( SELECT 1
                   FROM table
                   WHERE table.name = othertable.name )

или аналогичный запрос с JOIN ... WHERE ... IS NULL.

Вариант 2. Игнорировать попытку вставить дубликат.

Создать уникальный индекс по полю name и выполнять вставку запросом INSERT IGNORE - дубли будут проигнорированы и не вставлены.

Если уникальность name в таблице диктуется предметной областью, то вариант 2 (создание уникального индекса) - единственно правильный.

Answer 2

Можно использовать по примеру NOT EXISTS:

INSERT INTO TABLE_2
  (id, name)
SELECT t1.id,
       t1.name
  FROM TABLE_1 t1
 WHERE NOT EXISTS(SELECT id
                    FROM TABLE_2 t2
                   WHERE t2.id = t1.id)

Или NOT IN:

INSERT INTO TABLE_2
  (id, name)
SELECT t1.id,
       t1.name
  FROM TABLE_1 t1
 WHERE t1.id NOT IN (SELECT id
                       FROM TABLE_2)

Или LEFT JOIN/IS NULL:

INSERT INTO TABLE_2
  (id, name)
   SELECT t1.id,
          t1.name
     FROM TABLE_1 t1
LEFT JOIN TABLE_2 t2 ON t2.id = t1.id
    WHERE t2.id IS NULL

Исходный ответ

READ ALSO
PHP Fatal error: Call to a member function find() on a non-object - SimpleHmlDom

PHP Fatal error: Call to a member function find() on a non-object - SimpleHmlDom

В цикле у меня перебираются страницы и загружаются

102
Как получить статус "в наличии"?

Как получить статус "в наличии"?

Собственно сабж в заголовкеВывожу товары через каталог, надо этот статус вывести

87
Неверный sql запрос, как я понимаю

Неверный sql запрос, как я понимаю

Заношу новые данные пользователей в БД по их запросу

116
Почему данные заказа не отображаются?

Почему данные заказа не отображаются?

В личном кабинете woocommerce, при просмотре заказов по ссылке /wp-admin/editphp?post_type=shop_order есть один заказ, в котором отсутствуют данные покупателя, но статус...

109