从最大id的3个表中选择,使用leftjoin或子​​查询

时间:2017-08-27 19:22:08

标签: mysql sql join subquery

我希望用最新的idStavZakazky选择表zakazka中的所有行。怎么弄? EER图表: enter image description here

轻松离开后加入

 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 个答案:

答案 0 :(得分:1)

您可以在idStavZakazky表格中找到每个Zakazka_idZakazkam的最大stavzakazky,然后找到原始表格中的相应行(因为您需要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;