Как я могу выполнить соединение, только если определенное значение является числом? - PullRequest
0 голосов
/ 08 июля 2020

у меня есть это соединение sql код:

SELECT tracce.titolo, tracce.data, a1.aka as 'main', a2.aka as 'feat'
FROM tracce 
LEFT JOIN artist a1 ON tracce.idma = a1.id
LEFT JOIN feat ON feat.idt = tracce.id
LEFT JOIN artist a2 ON a2.id = feat.ida

Структура таблицы:

  • исполнитель: id - он же
  • tracce: id - titolo - idma - данные (id трека, titolo - название трека, idma - id основного исполнителя, а data - дата)
  • feat: idt - ida (idt - id трека а ida - идентификатор выбранного исполнителя)

пример таблиц:

  • Художник: 1 - Andrea / 2 - Antonio
  • Tracce: 20 - Стеки - 1 - 09072020
  • Feat: 20 - 2/20 - Simone

Хочу, после присоединения получу:

  • Titolo / Data / Main / Feat
  • Stacks / 09072020 / Andrea / Antonio (где antonio - это идентификатор id = 2)
  • Stacks / 09072020 / Andrea / Simone (где simone - значение ida в таблице feat)

Поле feat.ida - это строка, содержащая идентификатор, если указанный исполнитель находится в нашей системе, или имя исполнителя, если оно отсутствует в нашей системе. Когда я выполняю этот запрос, когда feat.ida не является числом (поэтому, когда есть имя), он возвращает «Null», но я хочу, чтобы он возвращал значение «feat.ida». Большое спасибо

1 Ответ

0 голосов
/ 09 июля 2020

Вы можете использовать функцию COALESCE(), чтобы выбрать первое значение, которое не является нулевым.

SELECT tracce.titolo, tracce.data, a1.aka as 'main', COALESCE(a2.aka, feat.ida) as 'feat'
FROM tracce 
LEFT JOIN artist a1 ON tracce.idma = a1.id
LEFT JOIN feat ON feat.idt = tracce.id
LEFT JOIN artist a2 ON a2.id = feat.ida

Это должно дать вам результат, который вы ищете.

Но ваш дизайн БД ошибочен и может привести к проблемам в будущем. Вы не должны хранить два разных типа значений в одном поле (id / name). Например, что вы собираетесь делать, если у вас будет артист, который будет использовать номер в качестве псевдонима. В такой ситуации вы не сможете сказать, является ли номер идентификатором или именем. Гораздо лучше будет иметь дополнительный столбец для имени исполнителя, если у исполнителя нет записи в вашей таблице исполнителей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...