我有一张服务表:
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 :(得分: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 = ?