Задать вопрос

SQL как сделать выборку по двум таблицам одним запросом?

Есть две таблицы:

account
id, Name, Number, Date
account_history
id, Name, Number, Date, ParentId, Status

В таблице account хранятся актуальные данные, в таблице account_history история изменений данных таблицы account.

Когда мы изменяем строку в таблице account в таблице account_history создается запись с предыдущими данными изменяемой строки и в поле Status попадает значение 'active'

Когда мы удаляем строку из таблицы account в таблице account_history также создается запись с данными удаленной строки и в поле Status попадает значение 'deleted'

Поле account_history.ParentId - думаю понятно что там

Так вот, нужно сделать выборку по двум таблицам, одним запросом:
выбрать последние 50 записей с сортировкой по
account.id DESC и account_history.ParentId DESC
и чтоб из второй таблицы в выборку попадали только те записи у которых Status=deleted

---------------------------------------------------------------------------------------------------

допустим мы создали запись в таблице account с именем Паша(id1), потом создали еще одну с именем Лена(id2), и еще с именем Вася(id3), и допустим удалили Лена, в истории создалась запись Лена(id1) и теперь мы делаем выборку

результат:
id--Name--ParentId--Status
1---Паша
1---Лена---2 --------- deleted
3---Вася

Вот такой порядок выборки должен быть
Паша и Вася у нас выбирается из account, а Лена из account_history.

поля ParentId, Status есть только у таблицы account_history
  • Вопрос задан
  • 387 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
Пригласить эксперта
Ответы на вопрос 1
@microbot
Если правильно понял ТЗ, то нужно получить удаленные аккаунты. join может дать нам эту фильтрацию, сделав соединение.

select *
from account
join account_history on account_history.parentId = account.id and account_history.Status = 'deleted'
order by account.id desc
limit 50


Если нужно выбрать аккаунты и с тем условием, что не у всех может быть статус удален, то так:

select *
from account
left join account_history on account_history.parentId = account.id and account_history.Status = 'deleted'
order by account.id desc, account_history.parentId desc
limit 50
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы