Самосоединение MySQL возвращает все строки

В приведенном ниже примере данных мне нужен запрос, который возвращает каждую строку, где, если поле «contingent_on» равно NULL, оно возвращается как NULL, но если оно не равно NULL, оно возвращается с «ticket_name», соответствующим «primary_key». ' ценность.

Я пробовал запросы на самосоединение, но смог заставить их возвращать не NULL-строки.

пример данных таблицы:

primary_key | ticket_name      | contingent_on
          1 | site preparation | NULL
          2 | tender process   | NULL
          3 | construction     |    1 

Должны быть возвращены все строки, где в строке «строительство» вместо «1» в поле «contingent_on» вводится «подготовка площадки».

Это выглядит просто - можете ли вы добавить свой запрос, пожалуйста.

P.Salmon 30.07.2019 10:31
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
1
209
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно самостоятельное левое соединение:

select 
  t.primary_key,
  t.ticket_name,
  tt.ticket_name ticket_name2
from tablename t left join tablename tt
on tt.primary_key = t.contingent_on
order by t.primary_key

Смотрите демо.
Полученные результаты:

| primary_key | ticket_name      | ticket_name2     |
| ----------- | ---------------- | ---------------- |
| 1           | site preparation | null             |
| 2           | tender process   | null             |
| 3           | construction     | site preparation |

Спасибо, Форпас, отлично!

Brian 30.07.2019 10:54

Выглядит простым запросом:

select 
  primary_key,
  ticket_name,
  case when contingent_on is not null then ticket_name else contingent_on end as contingent_on
from <<your_table>>
order by primary_key

Другие вопросы по теме