从3表中选择最大id,什么使用leftjoin或子查询
问题描述:
我想选择表中的所有行zakazka与最新idStavZakazky。如何得到它? EER图: 从3表中选择最大id,什么使用leftjoin或子查询
并经过简单的左连接
SELECT `zakazka`.`idZakazka`,
`stavzakazky`.`idStavZakazky`,
`stavzakazky`.`Zakazka_idZakazka`,
`seznamstavu`.`Nazev`
FROM `autoservis`.`zakazka`
LEFT JOIN `autoservis`.`stavzakazky` ON `zakazka`.`idZakazka` = `stavzakazky`.`Zakazka_idZakazka`
LEFT JOIN `autoservis`.`seznamstavu` ON `stavzakazky`.`SeznamStavu_idSeznamStavu` = `seznamstavu`.`idSeznamStavu`
ORDER BY `zakazka`.`idZakazka`;
输出:
idZakazka|idStavZakazky|Zakazka_idZakazka|Nazev
_____________________________________________________
1| 2| 1|Založeno
_____________________________________________________
1| 3| 1|Přiřazeno
_____________________________________________________
2| 4| 2|Pozastavená
_____________________________________________________
2| 5| 2|Přiřazeno
但我想造成这个样子,与最新的idStavZakazky
只显示idZakazka|idStavZakazky|Zakazka_idZakazka|Nazev
_____________________________________________________
1| 3| 1|Přiřazeno
_____________________________________________________
2| 5| 2|Přiřazeno
答
您可以在stavzakazky
表中找到每个Zakazka_idZakazkam
的最大idStavZakazky
,然后从原始表中找到对应的行(因为您需要Nazev
列),然后执行左连接。
像这样:
select zakazka.idZakazka,
stavzakazky.idStavZakazky,
stavzakazky.Zakazka_idZakazka,
seznamstavu.Nazev
from autoservis.zakazka
left join (
select *
from autoservis.stavzakazky
join (
select Zakazka_idZakazkam, max(idStavZakazky) as idStavZakazky
from autoservis.stavzakazky
group by Zakazka_idZakazkam
) t using (Zakazka_idZakazkam, idStavZakazky)
) stavzakazky on zakazka.idZakazka = stavzakazky.Zakazka_idZakazka
left join autoservis.seznamstavu on stavzakazky.SeznamStavu_idSeznamStavu = seznamstavu.idSeznamStavu
order by zakazka.idZakazka;
谢谢!你救了我的命。 – newim123