0
我有两个父表如下使用st_distance父母几何
CREATE TABLE GISD.CUSTOMERS
(CUSTOMER_ID INTEGER NOT NULL,
FIRST_NAME VARCHAR (15) NOT NULL,
SURNAME VARCHAR (20) NOT NULL,
DATE_OF_BIRTH DATE NOT NULL,
HOUSE_NUMBER VARCHAR (5) NOT NULL
POST_CODE VARCHAR(8) NOT NULL,
STREET VARCHAR (25) NOT NULL,
TOWN VARCHAR (25) NOT NULL
);
SELECT ADDGEOMETRYCOLUMN('gisd','customers', 'customers_geom', '27700','POINT',2);
和
CREATE TABLE GISD.CINEMAS
(CINEMA_ID INTEGER NOT NULL,
CINEMA_NAME VARCHAR(25) NOT NULL,
ADDRESS_NUMBER INTEGER NOT NULL,
POST_CODE VARCHAR(8) NOT NULL,
STREET VARCHAR (25) NOT NULL,
TOWN VARCHAR (25) NOT NULL,
OPENING_TIME TIME NOT NULL,
CLOSING_TIME TIME NOT NULL
);
SELECT ADDGEOMETRYCOLUMN('gisd','cinemas', 'cinemas_geom', '27700','POLYGON',2);
SELECT ADDGEOMETRYCOLUMN('gisd','cinemas', 'centroid', '27700','POINT',2);
我有一个使用外键从这两个表作为这样的孩子:
CREATE TABLE GISD.BOOKING
(BOOKING_ID INTEGER NOT NULL,
CUSTOMER_ID INTEGER NOT NULL,
CINEMA_ID INTEGER NOT NULL,
TIME TIME NOT NULL,
DATE DATE NOT NULL,
FILM VARCHAR(50) NOT NULL,
BOOKING_METHOD VARCHAR (15) NOT NULL,
BOOKING_FEE NUMERIC NOT NULL -- Numeric is suggested by postgresql.org for currency
TICKET_PRICE NUMERIC NOT NULL
);
是否有一种方法可以让我获取唯一的预订ID并参考客户几何图形和电影地理metry来计算ST_Distance?我假设某种嵌套查询可以做到这一点,但没有运气?
欢呼
UPDATE(从评论)
我曾尝试下面的代码:
SELECT (ST_DISTANCE(
(SELECT centroid
FROM GISD.CINEMAS
INNER JOIN GISD.BOOKING ON CINEMAS.CINEMA_ID=BOOKING.CINEMA_ID
),(
SELECT customers_geom
FROM GISD.CUSTOMERS
INNER JOIN GISD.BOOKING ON CUSTOMERS.CUSTOMER_ID=BOOKING.CUSTOMER_ID
)
))
却得到一个错误说“由子查询返回多行作为一种表达'任何想法如何绕过这个?理想情况下,我希望它返回每个预订ID的距离。
1)将FK:REFERENCES customers(id)添加到customer_id的预订表中。 2)cinema_id类似3)将DATE +时间组合成一个时间戳字段(很多easyer需要处理和比较)4)你只需要一个'select ...从一个连接B ON ... join c ON ...'类型的查询。 – wildplasser 2013-02-16 18:15:01
只需google'SQL JOIN'并阅读文档。 – 2013-02-16 18:54:04
谢谢你们。你指引我朝着正确的方向发展!我曾尝试下面的代码SELECT(ST_DISTANCE((SELECT重心 FROM GISD.CINEMAS INNER JOIN GISD.BOOKING ON CINEMAS.CINEMA_ID = BOOKING.CINEMA_ID),(SELECT customers_geom FROM GISD.CUSTOMERS INNER JOIN GISD.BOOKING 客户.CUSTOMER_ID = BOOKING.CUSTOMER_ID))) ,但得到一个错误,说'多个行作为表达式使用子查询返回' 任何想法如何得到这个?我理想的是希望它返回每个预订ID的距离 – user2076033 2013-02-16 18:58:20