Как игнорировать вставку записей из таблицы в другую таблицу, когда оба поля таблицы имеют одинаковое значение в MySQL?

У меня есть 2 таблицы с именами и адресами электронной почты. Теперь я хочу объединить эти таблицы в новую таблицу без повторяющихся записей. Я хочу использовать поля электронной почты, чтобы избежать дублирования значений в обеих таблицах. Я слышал, что запрос INSERT IGNORE используется для вставки значений в таблицу, не затрагивая существующие записи. Как написать запрос INSERT IGNORE для проверки поля электронной почты на предмет дублирования. Если кто знает другие способы тоже приветствуются.

table1:
fid fname   email
--- -----   -----
1   Balaji  [email protected]
2   xxxxx    [email protected]
3   Bala    [email protected]

table2:

gid gname  gemail
--- -----  ------
1   Bala   [email protected]
2   vinoth [email protected]

Ожидаемый результат:

table3:
-------
id name   email
-- ----   -----
1   Balaji  [email protected]
2   xxxxx    [email protected]
3   Bala    [email protected]
4   vinoth [email protected]

person Balaji Kandasamy    schedule 25.06.2013    source источник
comment
stackoverflow.com/ вопросы/548541/   -  person didierc    schedule 25.06.2013
comment
Вы нашли решение для этого: in-m/%22Here%22" title="Есть ли какое-либо бесплатное расширение для создания этикетки или обложки продукта в m">magento.stackexchange.com/questions/5571/? , если да, пожалуйста, помогите мне с полным кодом, вы можете присоединиться здесь: chat.stackexchange.com/rooms/42832/magento -обсудить   -  person fresher    schedule 02.08.2016


Ответы (1)


MySQL поддерживает UPDATE ON DUPLICATE KEY, но для работы вам необходимо добавить ограничение unique к таблице, которую вы хотите вставить.

Предполагая, что Table3 - это имя вашей новой таблицы. Сначала вам нужно добавить ограничение,

ALTER TABLE Table3 ADD CONSTRAINT tb_uq UNIQUE (name, email)

и теперь вы можете иметь уникальные записи в новой таблице, чтобы объединить предыдущую таблицу,

INSERT INTO table3(name, email)
SELECT name, email 
FROM
(
    SELECT fid id, fname name, email FROM Table1
    UNION ALL
    SELECT gid id, gname name, gemail email FROM Table1
) s
ON DUPLICATE KEY UPDATE name = VALUES(name);

Альтернативное решение без использования ON DUPLICATE KEY UPDATE. заключается в использовании UNION (без ALL) и предполагает, что Table3.ID установлено как автоинкремент

INSERT INTO table3(name, email)
SELECT name, email 
FROM
(
    SELECT fname name, email FROM Table1
    UNION
    SELECT gname name, gemail email FROM Table2
) s
person John Woo    schedule 25.06.2013