2017-08-27 67 views
1

我想选择表中的所有行zakazka与最新idStavZakazky。如何得到它? EER图: enter image description here从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 

回答

1

您可以在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; 
+0

谢谢!你救了我的命。 – newim123