#mysql #sql
Вопрос:
У меня есть две таблицы ДОКУМЕНТОВ и ПОДПИСЕЙ, как показано ниже
DOCUMENTS
doc_id doc_name
1 Contract
2 Lead
3 Invoice 1
4 Invoice 2
5 Payment 123
SIGNATURES
sig_id sig_doc_id signature_name
1 1 Paul
2 2 Mark
3 1 Chew
4 2 Paul
5 3 John
6 3 Derek
7 3 Silvan
8 5 Roden
И я пытаюсь узнать фамилию и имя.
EXPECTED OUTPUT
doc_id doc_name signature_name
1 Contract Chew
2 Lead Paul
3 Invoice 1 Silvan
4 Invoice 2 < empty because we not have signature
5 Payment 123 Roden
У меня есть SQL-скрипка с базой данных и запросом, но при запуске поиска запись не найдена.
http://sqlfiddle.com/#!9/b98474/3
Вот мой вопрос
SELECT docs.*, sign.*
FROM cnt_man_docs docs
INNER JOIN cnt_man_doc_signatures sign ON docs.cnt_man_doc_id = sign.cnt_man_doc_signature_doc_id
WHERE sign.cnt_man_doc_signature_id =
(SELECT MAX(cnt_man_doc_signature_id)
FROM cnt_man_doc_signatures
WHERE sign.cnt_man_doc_signature_id = docs.cnt_man_doc_id)
Комментарии:
1. Последний по какому заказу?
2. Я могу заказать по doc_id ?
Ответ №1:
Простой метод-это коррелированный подзапрос:
select d.*,
(select s.signature_name
from signatures s
where s.sig_doc_id = d.doc_id
order by s.sig_id desc
limit 1
) as signature_name
from documents d;
С индексом signatures(doc_id, sig_id desc, signature_name)
это, вероятно, также самый быстрый метод.