2012-03-25 8 views
0

Ich habe 2 Tabellen.optimierte Abfrage von 2 Tabellen

Restaurant 
------------------ 
id, name, address 

Inspection 
--------------------------------------------- 
id, result, date_of_inspection, restaurant_id 

Jetzt muss jedes Restaurant 1 oder mehr Inspektionen haben. Also, was ich tun möchte, ist alle Restaurants aufzulisten und ihre neuesten inspection_result zu zeigen.

Ist es möglich, dies in 1 Abfrage zu tun und ohne dass das Ergebnissatz 1 Zeile für jede Inspektion enthält?

Im Idealfall jede zurückgegebene Zeile so etwas wie diese enthalten würde:

Result row 
------------------------------------ 
restaurantid, name, address, result 
+0

Nun, ich habe keine Ahnung, wie das in einer Aussage getan. Was ich bisher versucht habe, ist dies: wähle restaurant.id als restId, restaurant.name als restName aus restaurant, inspection wo restaurant.id = inspection.restaurantid. Wenn es 3 Inspektionen gegeben hat, bekomme ich 1 Reihe für jede Inspektion. – Trj

Antwort

1

try this:

select r.id, r.name, r.address, 
    (select result from Inspection where restaurant_id = r.id order by date_of_inspection desc LIMIT 1) as result 
from Restaurant r 
+1

top 1 ist TSQL, nicht SQLite, nein? –

+0

danke, ich habe das sqllite-tag nicht gesehen. – Diego

+0

Danke! Das hat den Trick gemacht :) – Trj