MySQL как получить ID родительского поля у которого в разных строках есть значение?
Есть Таблица "Поездки"
ID | TITLE
1 | ТЕСТОВАЯ
Есть Таблица "Поездки_Точки"
ID | ПОЕЗДКИ_ID | FROM | TO
1 | 1 | МСК | СПБ
2 | 1 | СПБ | КРД
3 | 1 | КРД | СОЧИ
Как написать правильно запрос, который сможет получать из таблицы "Поездки_Точки" уникальные ПОЕЗДКИ_ID, у которых есть совпадение по FROM и TO.
Например:
Найти ПОЕЗДКИ_ID , где есть FROM МСК и TO КРД =.> Результат запроса "1"
Найти ПОЕЗДКИ_ID , где есть FROM МСК и TO СОЧИ =.> Результат запроса "1"
То есть получить ID родителя, где у двух разных записей в таблице совпадают поля по условиям?
а зачем вы первую таблицу привели, если в запросах она никак не фигурирует?
Не используйте кириллицу в названиях колонок, это где-нибудь вылезет боком.
В подготовке данных часто желательно учесть и негативные сценарии.
Местоположения лучше бы вынести в отдельную таблицу, а в целевой таблице использовать ID этих местоположений.
SELECT `travel_id`
FROM `travel_point`
WHERE `from`='МСК' OR `to`='СОЧИ'
GROUP BY `travel_id`
HAVING COUNT(`id`)>1
Но это даст ложные срабатывания для некоторых случаев, когда какой-то пункт в поездке был дважды. Например, Омск-Сочи-Спб-Сочи тоже подойдёт под этот запрос.
Тогда надо использовать JOIN:
SELECT `travel_id`
FROM `travel_point` AS `t1` JOIN `travel_point` as `t2` USING (`travel_id`)
WHERE `t1`.`from`='СПБ' AND `t2`.`to`='СОЧИ'
GROUP BY `travel_id`
Михаил Ливач, здесь скорее всего имелся ввиду сервис для попутчиков или любой другой, где нужно выбрать часть пути из общего. Поэтому вариант не совсем корректен, нужно выбирать сперва общий путь по from, а уже из них выбирать по to и что точка будет позже, чем from. Иначе, в примере выше можно уехать из КРД в СПБ по 1 маршруту.
Сделать это можно через тот же join на себя, введя время или очередность точек в пути. Вероятно можно через аналитическую функцию, но нужно смотреть.