Yandex Metrika
sanches.free

Сравнение двух списков в MySQL: LEFT JOIN против расхождений

Типичный кейс

Нужно сверить два набора ключей — например, номера платежей по банку и по вашему интернет‑магазину на Битрикс (b_sale_* или кастомные таблицы). Самый прямой путь через временные таблицы и два зеркальных LEFT JOIN.

Таблицы для сличения

CREATE TABLE t_bank (
  id VARCHAR(64) NOT NULL DEFAULT '',
  UNIQUE KEY ux_bank (id)
);

CREATE TABLE t_site (
  id VARCHAR(64) NOT NULL DEFAULT '',
  UNIQUE KEY ux_site (id)
);

Заполнить и сравнить

INSERT IGNORE INTO t_site VALUES
('some data 1'), ('some data 2'), ('some data 3');

INSERT IGNORE INTO t_bank VALUES
('some data 1'), ('some data 2');

Строки, которые есть на сайте, но не пришли из банка

SELECT s.*
FROM t_site s
LEFT JOIN t_bank b ON s.id = b.id
WHERE b.id IS NULL;

В примере — одна строка some data 3.

Строки из банка, которых нет на сайте

SELECT b.*
FROM t_bank b
LEFT JOIN t_site s ON s.id = b.id
WHERE s.id IS NULL;

Для демонстрационных данных второй результат пустой; в бою здесь находят поступления без заказов.

В контексте Битрикс

Вместо временных таблиц можно использовать CREATE TEMPORARY TABLE … AS SELECT … из выборок по заказам и выгрузки банка, затем тех же два запроса. Убедитесь в единых форматах ключа (пробелы, регистр, внешние коды платёжных систем).

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии