2013-12-20 53 views
0

我有服務的表:如何使用Postgres進行查詢?

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 | 

所以每個服務可以有多個子服務。如何創建一個查詢來顯示特定服務的所有子服務?或者我有錯誤的表格,需要重構我的數據?

回答

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

然後你可以選擇子服務