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 имеется и много других вкусностей.



   
© ALLROUNDER