2017-08-27 7 views
1

テーブルzakazkaのすべての行を最新のidStavZakazkyで選択します。それを得る方法? EERダイアグラム: enter image description here最大IDに沿って3つのテーブルから選択します。左結合または副問い合わせを使用するもの

そして簡単に左後

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

関連する問題