|
|
|
| Таблица состоит из двух колонок: слова и первичный ключ ID.
Слова могут повторяться.
Надо найти все возможные словосочетания, в которых одно слово находится в одном списке, другое в другом , а расстояние между ними не более 40.
SELECT t1.id, t2.id FROM tab as t1, tab as t2
WHERE
t1.w IN() AND
t2.w IN() AND
ABS(t1.id - t2.id) < 40
ORDER BY ABS(t1.id - t2.id);
|
Этот запрос решает задачу.
Однако, мне надо наложить ещё одно условие:
Необходимо, чтобы первое слово в словосочетании использовалось не более одного раза и более того, если с этим словом можно составить несколько словосочетаний, то должно быть выбрано именно то, в котором слова расположены ближе всего друг к другу, остальные словосочетания должны быть отброшены.
На первый взгляд хочется добавить просто
но в этом случае могут остаться пары не с минимальным расстоянием между словами, а наоборот, максимальным | |
|
|