Сравните уникальные значения из двух таблиц mysql - PullRequest
1 голос
/ 17 декабря 2009

У меня есть две таблицы mysql: в TableA 10000 записей. В TableB 2000 записей.

Я хочу скопировать 8000 уникальных записей из Таблицы A в Таблицу B, игнорируя 2000 в Таблице B, которые уже были скопированы.

Ответы [ 3 ]

5 голосов
/ 17 декабря 2009

Если уникальность определяется ограничением PRIMARY KEY или UNIQUE, то вы можете использовать INSERT IGNORE:

INSERT IGNORE INTO TableB SELECT * FROM TableA;

Строки, которые являются дубликатами и конфликтуют со строками, уже находящимися в TableB, будут автоматически пропущены, а остальные 8000 строк будут вставлены.

Подробнее см. В документах по INSERT.

Если вам нужно сделать это в PHP, прочитайте о функции array_diff_key(). Сохраните ваши массивы со значениями первичного ключа в качестве ключа элементов массива. Однако нет никаких гарантий производительности этой функции PHP на таких больших массивах!

1 голос
/ 17 декабря 2009

Используйте синтаксис INSERT INTO :

INSERT INTO TABLE_B 
  SELECT *
    FROM TABLE_A a
   WHERE NOT EXISTS(SELECT NULL
                      FROM TABLE_B b
                     WHERE b.column = a.column)

Вам необходимо обновить WHERE b.column = a.column), чтобы удовлетворить, однако вы решаете, что запись уже существует в TABLE_B.

0 голосов
/ 17 декабря 2009

Что-то вроде этого:

insert into TableB
select *
from Table A
where not exists (
    select 1
    from TableB
    where TableB.id = TableA.id
)

Или, если записи в таблице B "не уникальны" из-за их первичного ключа, insert ignore может помочь, я полагаю.

...