【问题标题】:Select from 3 table along max id, what use leftjoin or subquery从最大 id 的 3 个表中选择,使用 leftjoin 或子查询
【发布时间】:2017-08-27 19:22:08
【问题描述】:

我想选择表 zakazka 中具有最新 idStavZakazky 的所有行。如何得到它? 能效比图:

轻松左加入后

 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

【问题讨论】:

    标签: mysql sql join subquery


    【解决方案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;
    

    【讨论】:

    • 谢谢!你救了我的命。
    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 2015-06-26
    相关资源
    最近更新 更多