1

ショップ、ポテト、トマトの 3 つのテーブルがあります (トマト テーブルはポテト テーブルのように見えます)。ポテト テーブルの ID は実際にはショップの ID です。つまり、そのショップのポテトの価格です。

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

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

私がやりたいのは、トマトとポテトの価格とともに、ある位置から最大 10 km のすべての店を選択することです。

今、私はジャガイモの価格と一緒に店を選択できるこのクエリを持っています

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
    );

でもその店のトマトの値段も知りたいです。どうすればそれができますか?

4

1 に答える 1

3

左結合を使用

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 );

各店がトマトとジャガイモを販売している場合は、内部結合を使用できます。

于 2013-10-01T21:22:04.123 に答える