Существует таблица:
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`
Вариант 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 (создание уникального индекса) - единственно правильный.
Можно использовать по примеру 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
Исходный ответ
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В цикле у меня перебираются страницы и загружаются
Собственно сабж в заголовкеВывожу товары через каталог, надо этот статус вывести
В личном кабинете woocommerce, при просмотре заказов по ссылке /wp-admin/editphp?post_type=shop_order есть один заказ, в котором отсутствуют данные покупателя, но статус...