Sql 从多个表中获取数据
我有三张桌子——商店、土豆和西红柿(西红柿桌子看起来像土豆桌子)。马铃薯表中的id准确地说是商店的id——因此该商店的马铃薯价格Sql 从多个表中获取数据,sql,postgresql,select,postgis,Sql,Postgresql,Select,Postgis,我有三张桌子——商店、土豆和西红柿(西红柿桌子看起来像土豆桌子)。马铃薯表中的id准确地说是商店的id——因此该商店的马铃薯价格 +----+-------+-----------+ | potato | +----+-------+-----------+ | id | price | date_time | +----+-------+-----------+ +----+-----+-----+------+------+ |
+----+-------+-----------+
| 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
);
但我还想知道那家商店西红柿的价格。怎么做呢?使用左连接
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 );
如果每家商店都卖西红柿和土豆,你可以使用“内部联接”