Получить главный ключ по трем уровням

213
04 марта 2018, 22:03

Задача следующая:
Есть табличка keys со столбиками:
key | bind
Где key - это ключ, а bind - это так сказать привязанныйkey.
Пример:

key1
key2  key1  
key3  key1  
key4  key1  
key5  key2  
key6  key5  

Суть в том, что привязка работает следующим образом:
Берем определенный ключ:

  • key1
    • key2
      • key5
        • key6
    • key3
    • key4

Выводится все правильно.
Вопрос:
Как написать функцию, которая будет брать главный ключ - со второго и 3 уровня?
Пример:
Берем key6 вывести должно key1, берем key5, вывести должно key1, берем key2 вывести должно key1.
Более 3 уровней быть не должно, а также не должно уходить выше - имеется ввиду, что если у key1 появится key0, то с key6 не должно прыгнуть выше key1, key5, должен возвращать key1, key2 должно вернуть key1 - последовательность должна сохраниться key0 не должен выводиться.

Не могу написать сам алгоритм, не въеду никак, пожалуйста помогите.

Answer 1
select coalesce(T2.bind, T1.bind, T.bind, T.`key`)
  from Table1 T
  left join Table1 T1 on T1.`key`=T.bind
  left join Table1 T2 on T2.`key`=T1.bind
 where T.`key`='key6'

Тест на sqlfiddle.com

Если ни одного вышестоящего ключа не найдено, то выдает искомый ключ. Если это не требуется, а надо получить NULL, то убрать из coalesce T.key.

UPD:

SELECT `k2`.`bind`
AS `k2bind`, `k1`.`bind`
AS `k1bind`, `k`.`bind`
AS `kbind`, `k`.`key`
AS `kkey`
FROM `keys` AS `k`
LEFT JOIN `keys`
AS `k1`
ON `k1`.`key`=`k`.`bind`
LEFT JOIN `keys`
AS `k2`
ON `k2`.`key`=`k1`.`bind`
WHERE `key`='key6'
READ ALSO
MySQL и заглавная “И”

MySQL и заглавная “И”

Работаю с MySQL таблицей, для всей таблицы при создании указано CHARACTER SET=utf8mb4 COLLATE=utf8mb4_binКириллица обрабатывается вся успешно, за исключением...

188
Проверка наличия определенной строки в mysql через python

Проверка наличия определенной строки в mysql через python

ЗдравствуйтеМне нужно организовать функцию, которая по передаваемому параметру будет искать есть ли точно такая же строка в БД

215
не могу обратиться к NEW в триггере

не могу обратиться к NEW в триггере

Таблица Goals состоит из полей

195
return None python

return None python

У меня есть функция, которая из БД берет определенную строку и возвращает id, но функция возвращает не id, как задумывалось, а NoneВ чем проблема?

218