MySQL. Сравнение двух таблиц.
При
работе с массивами данных MYSQL иногда
приходится сравнивать две таблицы, не
имеющие общего индекса. Например надо
найти соответствие по ФИО в двух таблицах.
Ни по фамилии, ни по имени сравнить не
получится, нужно полное сравнение по
Фамилии Имени Отчеству и хорошо бы еще
и по дате рождения. Полные тесоки не так
редко встречаются. MySQL нет
поддержки
INTERSECT/EXCEPT, нужен другой вариант. Я для
себя нашел такой:
SELECT * FROM buhgalters WHERE CONCAT(`surname`, `name`, `secname`) IN (SELECT CONCAT(`SURNAME`, `NAME`, `SECNAME`) FROM insure);
Объясню:
Оператор
CONCAT(`surname`,
`name`, `secname`)
объединяет
значение полей Фамилии Имени Отчеству
в одно поле в обоих таблицах, а по
оператору
IN
происходит
их сравнение.
Возможно,
это не лучший способ, но работает. Мне
приходится работать не большими массивами
данных, и этот способ вполне подходит,
как по скорости, так и по точности.
В
последнее время я все больше стал
посматривать в сторону PostgreSQL, где
поддержка
INTERSECT/EXCEPT
имеется и много других вкусностей.