如何使用Postgres进行此查询?

时间:2013-12-20 03:22:04

标签: postgresql relational-database

我有一张服务表:

    Column    |         Type          |                           Modifiers                           
--------------+-----------------------+---------------------------------------------------------------
 service_id   | integer               | not null default nextval('services_service_id_seq'::regclass)
 service_name | character varying(40) | not null

我还有一个子服务表:

     Column      |         Type          |                              Modifiers                              
-----------------+-----------------------+---------------------------------------------------------------------
 subservice_id   | integer               | not null default nextval('subservices_subservice_id_seq'::regclass)
 subservice_name | character varying(40) | not null

最后我有一个2,service_subservices的连接表:

    Column     |  Type   | Modifiers 
---------------+---------+-----------
 service_id    | integer | 
 subservice_id | integer | 

因此每个服务可以有多个子服务。如何创建一个查询,向我显示特定服务的所有子服务?或者我的表格是否错误并需要重新构建我的数据?

1 个答案:

答案 0 :(得分:0)

您有一个典型的多对多关系的表结构。您可以通过以下方式获取子服务列表:

SELECT ssvc.subservice_name FROM service svc, service_subservice ss, subservice ssvc
WHERE svc.id = ss.service_id AND ssvc.id = ss.subservice_id AND svc.id = ?

但是,如果要建模一对多关系,则应使用更简单的架构:

服务(就像你拥有的那样)

子服务:

CREATE TABLE subservice (
   subservice_id serial not null primary key,
   name varchar(40),
   service_id integer not null references service(service_id)
)

然后您可以选择以下的子服务:

SELECT name from subservice WHERE service_id = ?