Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Select zagnieżdżony
Forum PHP.pl > Forum > Bazy danych > MySQL
sulek
Witam,

Mam prośbę. Próbuje zbudować zapytanie które, wyświetli mi listę środków trwałych z najwyższym idoperacji. Zaznaczę ze muszę połączyć trzy tabele.

W pieszej mam Listę Sroków trwałych -dbo.tblSRODKI s
W drugiej mam Mapowanie danych Między operacjami z Środkami Trwałymi dbo.tblMIEJSCAsrodki
W trzeciej mam Listę miejsc użytkowana - dbo.tblMIEJSCA

Potrzebuje wyświetlić listę Srodków trwałych z najwyższym kodem operacji. Oznacza on aktualne miejsce użytkowania.



Zapytanie które napisałem

  1. SELECT s.id, s.NazwaSrodka, k.IdOperacji, m.Nazwa AS 'Nazawa_operacji' FROM dbo.tblSRODKI s
  2.  
  3. INNER JOIN dbo.tblMIEJSCAsrodki k
  4. ON(s.id = k.IdSrodka)
  5.  
  6. INNER JOIN dbo.tblMIEJSCA m
  7. ON(k.IdMiejsca = m.id)
  8.  
  9. ORDER BY s.id, k.IdOperacji



Wynik jaki otrzymałem:




Jak z podanego zapytania wyświetlić dla każdego s.id (SrodkaTrwałego) wyświetlić tylko jeden rekord, z najwyższym k.IdOperacj
mmmmmmm
Zamiast:
  1. INNER JOIN dbo.tblMIEJSCAsrodki k

daj:
  1. INNER JOIN (SELECT * FROM dbo.tblMIEJSCAsrodki WHERE (IdSrodka, IdOperacji) IN (SELECT IdSrodka, Max(IdOperacji) FROM dbo.tblMIEJSCAsrodki GROUP BY IdSrodka) ) k
sulek
OK dzięki za odpowiedz. Ja w między czasie zmodyfikowałem zapytanie i z mojej analizy wynika ze też działa.


  1. SELECT s.id, s.NazwaSrodka, k.IdOperacji, m.Nazwa AS 'Nazawa_operacji' FROM dbo.tblSRODKI s
  2.  
  3. INNER JOIN dbo.tblMIEJSCAsrodki k
  4. ON(s.id = k.IdSrodka)
  5.  
  6. INNER JOIN dbo.tblMIEJSCA m
  7. ON(k.IdMiejsca = m.id)
  8.  
  9. WHERE k.IdOperacji = (SELECT max(ss.IdOperacji) FROM dbo.tblMIEJSCAsrodki ss WHERE ss.IdSrodka = k.IdSrodka)
  10.  
  11. ORDER BY s.id, k.IdOperacji
  12.  



Może komuś się przyda smile.gif
mmmmmmm
Sprawdz plany wykonania. Wydaje mi się, że moje jednak będzie bardziej wydajne.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.