Postgis函数ST_包含用于编写sql查询的

Postgis函数ST_包含用于编写sql查询的,sql,postgresql,postgis,Sql,Postgresql,Postgis,我在编写使用Postgis函数st_包含的查询时遇到了一些问题。我想展示科罗拉多州所有的市区。这里是查询的实际定义 Return the names (name10) of all urban areas (in alphabetical order) that are entirely contained within Colorado. Return the results in alphabetical order. (64 records) 我使用的表是tl_2010_us_stat

我在编写使用Postgis函数st_包含的查询时遇到了一些问题。我想展示科罗拉多州所有的市区。这里是查询的实际定义

Return the names (name10) of all urban areas (in alphabetical order) that are entirely contained 
within Colorado. Return the results in alphabetical order. (64 records)
我使用的表是tl_2010_us_state10(它存储各州的信息)。我想我将在这个表中使用name10变量,因为它包含所有州的名称

    Table "public.tl_2010_us_state10"
    Column   |            Type             |                            Modifiers                             
 ------------+-----------------------------+-------------------------------------
  gid        | integer                     | not null default 
  region10   | character varying(2)        | 
  division10 | character varying(2)        | 
  statefp10  | character varying(2)        | 
  statens10  | character varying(8)        | 
  geoid10    | character varying(2)        | 
  stusps10   | character varying(2)        | 
  name10     | character varying(100)      |
  lsad10     | character varying(2)        | 
  mtfcc10    | character varying(5)        | 
  funcstat10 | character varying(1)        | 
  aland10    | double precision            | 
  awater10   | double precision            | 
  intptlat10 | character varying(11)       | 
  intptlon10 | character varying(12)       | 
  coords     | geometry(MultiPolygon,4326) | 

 Indexes:
 "tl_2010_us_state10_pkey" PRIMARY KEY, btree (gid)
 "tl_2010_us_state10_coords_gist" gist (coords)
然后我有一个表格,显示所有的城市信息。我想再次使用name10变量,因为它存储所有城市区域的名称

                                      Table "public.tl_2010_us_uac10"
    Column   |            Type             |                           Modifiers                         
------------+-----------------------------+-------------------------------------
 gid        | integer                     | not null default 
 uace10     | character varying(5)        | 
 geoid10    | character varying(5)        | 
 name10     | character varying(100)      |
 namelsad10 | character varying(100)      | 
 lsad10     | character varying(2)        | 
 mtfcc10    | character varying(5)        | 
 uatyp10    | character varying(1)        | 
 funcstat10 | character varying(1)        | 
 aland10    | double precision            | 
 awater10   | double precision            | 
 intptlat10 | character varying(11)       | 
 intptlon10 | character varying(12)       | 
 coords     | geometry(MultiPolygon,4326) | 

 Indexes:
"tl_2010_us_uac10_pkey" PRIMARY KEY, btree (gid)
"tl_2010_us_uac10_coords_gist" gist (coords)
我在sql中编写的代码是

 select a.name10 as urban_area
from tl_2010_us_uac10 as a 
join tl_2010_us_state10 as b 
on ST_Contains(b.gid = a.gid)
where b.name10 = 'Colorado'
order by a.name10;
但是我得到了这个错误

ERROR:  function st_contains(integer, integer) does not exist
LINE 1: ...010_us_uac10 as a join tl_2010_us_state10 as b on ST_Contain...
                                                         ^
HINT:  No function matches the given name and argument types. You might need to add explicit 
type casts.
需要两个参数,这两个参数都应为几何图形类型。因此,你犯了两个错误

  • 使用整型字段
  • 将它们与=进行比较,而不是将它们作为单独的参数提供
  • 通过纠正这些错误,您可以

    select a.name10 as urban_area
    from tl_2010_us_uac10 as a 
    join tl_2010_us_state10 as b 
      on ST_Contains(b.coords, a.coords)
    where b.name10 = 'Colorado'
    order by a.name10;
    

    ST_Contains需要几何体列,但您正在传入gid,它是一个整数。它也是一个需要两个参数的函数,但有一个等式语句。试试ST_Contains(b.coords,a.coords)。好的,非常感谢!我知道我在正确的轨道上!如果你创建了一个实际的答案,我可以选择它作为正确的答案,并给你一些分数:)已添加为答案请不要重复类似的问题。我已经在评论中解释了你之前同样的问题的错误。安迪,你认为你能用st_Touchs帮我解决我的另一个问题吗?这是我的程序完成的最后一件事。如果你有时间看的话,这里有链接,再次感谢。