@romicohen
Системный Архитектор

Можно ли сделать составной уникальный ключ «в обе стороны» (напр. 3 и 15 == 15 и 3)?

Мне нужно сравнить между собой все записи из одной таблицы, и поместить результат сравнения во вторую таблицу.

Я предполагал решить вопрос с дубликатами, путем создания уникального составного ключа из полей id_1 и id_2

Но потом понял, что это проблему не решает, так как ключ (3 и 15) != (15 и 3) и, соответственно, MySQL не сможет отсеивать такие дубликаты.

Я, конечно, могу это [криво))] решить через PHP, но может можно как-то с помощью MySQL сделать?

Спасибо.

upd.: или может посоветуете какой-то принципиально иной подход?
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
Задача решается созданием вычисляемого поля. Один из вариантов:
CREATE TABLE test (
    id_1 INT,
    id_2 INT,
    ids VARCHAR(255) AS (CONCAT(LEAST(id_1, id_2), ' ', GREATEST(id_1, id_2))) STORED,
    PRIMARY KEY(ids),
    CHECK (id_1 <> id_2)
);

DEMO

В принципе, можно и триггером... но менее надёжно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы