6张表关联,出现问题
使用inner join 来做关联,可是出问题哎
CREATE TABLE "template"
(
template_id int4 NOT NULL,
name varchar(50),
createtime timestamp,
"type" varchar(50),
packetfilter_name varchar(50),
qos_name varchar(50),
deviceid int4,
CONSTRAINT template_id_pkey PRIMARY KEY (template_id),
CONSTRAINT fk_deviceid FOREIGN KEY (deviceid)
REFERENCES devices (deviceid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
ALTER TABLE "template" OWNER TO "admin";
CREATE TABLE taskparameter
(
taskparamid int4 NOT NULL,
paramname varchar(50),
paramvalue varchar(256),
taskqid int4 NOT NULL,
CONSTRAINT taskparameter_pkey PRIMARY KEY (taskparamid),
CONSTRAINT fk_taskqid FOREIGN KEY (taskqid)
REFERENCES taskqueue (taskqid) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITHOUT OIDS;
ALTER TABLE taskparameter OWNER TO "admin";
CREATE TABLE packetfilter
(
packetfilter_id int4 NOT NULL,
name varchar(50),
activeflag varchar(50),
packetflow int4,
reverseflowflag varchar(50),
"action" int4,
service varchar(50),
fromaddress varchar(50),
toaddress varchar(50),
schedule varchar(50),
logflag varchar(50),
fullname varchar(150),
createtime timestamp,
description varchar(255),
objectid int4,
udf int4 DEFAULT 1,
CONSTRAINT packetfilter_id_pkey PRIMARY KEY (packetfilter_id)
)
WITHOUT OIDS;
ALTER TABLE packetfilter OWNER TO "admin";
CREATE TABLE objectaddress
(
address_id int4 NOT NULL,
name varchar(50),
"type" varchar(50),
ipaddress varchar(50),
subnetmask varchar(50),
ipaddressstart varchar(50),
ipaddressend varchar(50),
fullname varchar(150),
createtime timestamp,
description varchar(255),
objectid int4,
udf int4 DEFAULT 1,
CONSTRAINT address_id_pkey PRIMARY KEY (address_id)
)
WITHOUT OIDS;
ALTER TABLE objectaddress OWNER TO "admin";
CREATE TABLE objectschedule
(
schedule_id int4 NOT NULL,
name varchar(50),
"day" int4,
starttime int4,
endtime int4,
fullname varchar(150),
createtime timestamp,
description varchar(255),
objectid int4,
udf int4 DEFAULT 1,
CONSTRAINT schedule_id_pkey PRIMARY KEY (schedule_id)
)
WITHOUT OIDS;
ALTER TABLE objectschedule OWNER TO "admin";
CREATE TABLE objectservice
(
service_id int4 NOT NULL,
name varchar(50),
servicetype int4,
serviceportstart varchar(50),
serviceportend varchar(50),
protocolid varchar(50),
fullname varchar(150),
createtime timestamp,
description varchar(255),
objectid int4,
udf int4 DEFAULT 1,
CONSTRAINT service_id_pkey PRIMARY KEY (service_id)
)
WITHOUT OIDS;
ALTER TABLE objectservice OWNER TO "admin";
sql语句:
select * from
(
(
(
(
(
(packetfilter inner join objectaddress on packetfilter.fromaddress=objectaddress.name) as pt inner join objectaddress on pt.toaddress=objectaddress.name
) as pk inner join objectschedule on pk.schedule=objectschedule.name
) as ps inner join objectservice on ps.service=objectservice.name
)as pm inner join templatepacketfiltermap on pm.packetfilter_id=templatepacketfiltermap.packetfilter_id
)as pn inner join template on pn.template_id=template.template_id
可以执行,没有问题,但是我如果加了一句
select * from
(
(
(
(
(
(
(packetfilter inner join objectaddress on packetfilter.fromaddress=objectaddress.name) as pt inner join objectaddress on pt.toaddress=objectaddress.name
) as pk inner join objectschedule on pk.schedule=objectschedule.name
) as ps inner join objectservice on ps.service=objectservice.name
)as pm inner join templatepacketfiltermap on pm.packetfilter_id=templatepacketfiltermap.packetfilter_id
)as pn inner join template on pn.template_id=template.template_id
)as po inner join taskparameter on po.template_id=taskparameter.paramvalue
)
就无法执行,抱错“ERROR: column reference "template_id" is ambiguous”
奇怪了,为什么和taskparameter关联就会出问题,找不到template_id这个column呢
请大家帮忙啦!!