2013-10-01 100 views
1

我有三个表 - 商店,土豆和番茄(番茄表看起来像马铃薯表)。在马铃薯桌上的id是商店的id - 所以这家商店的马铃薯的价格。从多个表中获取数据

+----+-------+-----------+ 
|   potato   | 
+----+-------+-----------+ 
| id | price | date_time | 
+----+-------+-----------+ 

+----+-----+-----+------+------+ 
|    shop    | 
+----+-----+-----+------+------+ 
| id | lat | lng | name | geom | 
+----+-----+-----+------+------+ 

我想要做的是选择所有距离某个位置最多10公里的商店,以及番茄和土豆价格。

现在,我有这个疑问,可以选择店,土豆价格

SELECT 
    shop.lat, 
    shop.lng, 
    shop.id, 
    potato.date_time AS potato_date, 
    potato.price as potato_price 
FROM 
    shop, 
    potato 
WHERE 
    potato.id = shop.id AND 
    ST_DWithin(
     ST_GeomFromText('POINT(xx.xxxxxx yy.yyyyyy)',4326), 
     shop.geom, 
     10*1000, 
     true 
    ); 

一起,但我想也得到在那家商店西红柿的价格。它怎么能做到?

回答

3

使用LEFT JOIN

SELECT 
    shop.lat 
    , shop.lng 
    , shop.id 
    , potato.date_time AS potato_date 
    , potato.price as potato_price 
    , tomato.date_time as tomato_date 
    , tomato.price as tomato_price 
FROM shop 
LEFT JOIN potato on potato.ID = shop.ID 
LEFT JOIN tomato on tomato.ID = shop.ID 
WHERE ST_DWithin(ST_GeomFromText('POINT(xx.xxxxxx yy.yyyyyy)',4326), shop.geom,10*1000, true); 

如果每个商店出售的西红柿和土豆,你可以使用内部连接。