从一个具有外键列的表中选择?
这是我的查询:
SELECT
seminar.oberbegriff AS Oberbegriff,
seminar.beschreibung AS Beschreibung,
seminar.semester AS Semester,"
seminar.titel AS Titel, dozent.nachname AS Dozent,
student.nachname AS Student, seminar.status AS Status
FROM
seminar
INNER JOIN
student ON seminar.titel = student.seminar_seminarThema
INNER JOIN
dozent ON seminar.titel = dozent.seminar_seminarThema;
在我的表研讨会
中,我有两个列(dozent_name
和student_name
)是外键。我的主要键研讨会
是titel
,student
和dozent
它是nachname
。
这个说法有什么问题?
CREATE TABLE IF NOT EXISTS public.dozent
(
akademischergrad character varying(30) COLLATE pg_catalog."default",
vorname character varying(39) COLLATE pg_catalog."default" NOT NULL,
nachname character varying(30) COLLATE pg_catalog."default" NOT NULL,
passwort character varying(30) COLLATE pg_catalog."default" NOT NULL,
email character varying(30) COLLATE pg_catalog."default" NOT NULL,
"seminar_seminarThema" character varying(50) COLLATE pg_catalog."default",
CONSTRAINT dozent_pkey PRIMARY KEY (nachname),
CONSTRAINT "seminarThema"
FOREIGN KEY ("seminar_seminarThema")
REFERENCES public.seminar (titel) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID ) WITH (OIDS = FALSE ) TABLESPACE pg_default;
和学生表:
CREATE TABLE IF NOT EXISTS public.student
(
vorname character varying(30) COLLATE pg_catalog."default" NOT NULL,
nachname character varying(30) COLLATE pg_catalog."default" NOT NULL,
email character varying(30) COLLATE pg_catalog."default" NOT NULL,
passwort character varying(30) COLLATE pg_catalog."default" NOT NULL,
matrikelnr character varying(30) COLLATE pg_catalog."default" NOT NULL,
"belegtesSeminar" character varying(10) COLLATE pg_catalog."default" NOT NULL,
studiengang character varying(30) COLLATE pg_catalog."default" NOT NULL,
abschluss character varying(30) COLLATE pg_catalog."default" NOT NULL,
"seminar_seminarThema" character varying(30) COLLATE pg_catalog."default",
"vortrag_vortragThema" character varying(30) COLLATE pg_catalog."default",
"ausarbeitung_ausarbeitungThema" character varying(30) COLLATE pg_catalog."default",
CONSTRAINT student_pkey PRIMARY KEY (nachname),
CONSTRAINT "seminarThema"
FOREIGN KEY ("seminar_seminarThema")
REFERENCES public.seminar (titel) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID,
CONSTRAINT "vortagThema"
FOREIGN KEY ("vortrag_vortragThema")
REFERENCES public.vortrag (titel) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID ) WITH (
OIDS = FALSE)TABLESPACE pg_default;
研讨会:
CREATE TABLE IF NOT EXISTS public.seminar(
"seminarID" integer NOT NULL,
oberbegriff character varying COLLATE pg_catalog."default" NOT NULL,
beschreibung character varying COLLATE pg_catalog."default" NOT NULL,
semester character varying COLLATE pg_catalog."default" NOT NULL,
titel character varying COLLATE pg_catalog."default" NOT NULL,
"dozent_Name" character varying COLLATE pg_catalog."default" NOT NULL,
"student_Name" character varying COLLATE pg_catalog."default",
status boolean NOT NULL,
CONSTRAINT seminar_pkey PRIMARY KEY (titel),
CONSTRAINT "dozentName" FOREIGN KEY ("dozent_Name")
REFERENCES public.dozent (nachname) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID,
CONSTRAINT "studentName" FOREIGN KEY ("student_Name")
REFERENCES public.student (nachname) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID)WITH ( OIDS = FALSE)TABLESPACE pg_default;
This is my query:
SELECT
seminar.oberbegriff AS Oberbegriff,
seminar.beschreibung AS Beschreibung,
seminar.semester AS Semester,"
seminar.titel AS Titel, dozent.nachname AS Dozent,
student.nachname AS Student, seminar.status AS Status
FROM
seminar
INNER JOIN
student ON seminar.titel = student.seminar_seminarThema
INNER JOIN
dozent ON seminar.titel = dozent.seminar_seminarThema;
In my table seminar
, I have two columns (dozent_Name
and student_Name
) which are foreign keys. My primary key in seminar
is titel
, in student
and dozent
it is nachname
.
What is wrong in this statement?
CREATE TABLE IF NOT EXISTS public.dozent
(
akademischergrad character varying(30) COLLATE pg_catalog."default",
vorname character varying(39) COLLATE pg_catalog."default" NOT NULL,
nachname character varying(30) COLLATE pg_catalog."default" NOT NULL,
passwort character varying(30) COLLATE pg_catalog."default" NOT NULL,
email character varying(30) COLLATE pg_catalog."default" NOT NULL,
"seminar_seminarThema" character varying(50) COLLATE pg_catalog."default",
CONSTRAINT dozent_pkey PRIMARY KEY (nachname),
CONSTRAINT "seminarThema"
FOREIGN KEY ("seminar_seminarThema")
REFERENCES public.seminar (titel) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID ) WITH (OIDS = FALSE ) TABLESPACE pg_default;
And the student table:
CREATE TABLE IF NOT EXISTS public.student
(
vorname character varying(30) COLLATE pg_catalog."default" NOT NULL,
nachname character varying(30) COLLATE pg_catalog."default" NOT NULL,
email character varying(30) COLLATE pg_catalog."default" NOT NULL,
passwort character varying(30) COLLATE pg_catalog."default" NOT NULL,
matrikelnr character varying(30) COLLATE pg_catalog."default" NOT NULL,
"belegtesSeminar" character varying(10) COLLATE pg_catalog."default" NOT NULL,
studiengang character varying(30) COLLATE pg_catalog."default" NOT NULL,
abschluss character varying(30) COLLATE pg_catalog."default" NOT NULL,
"seminar_seminarThema" character varying(30) COLLATE pg_catalog."default",
"vortrag_vortragThema" character varying(30) COLLATE pg_catalog."default",
"ausarbeitung_ausarbeitungThema" character varying(30) COLLATE pg_catalog."default",
CONSTRAINT student_pkey PRIMARY KEY (nachname),
CONSTRAINT "seminarThema"
FOREIGN KEY ("seminar_seminarThema")
REFERENCES public.seminar (titel) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID,
CONSTRAINT "vortagThema"
FOREIGN KEY ("vortrag_vortragThema")
REFERENCES public.vortrag (titel) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID ) WITH (
OIDS = FALSE)TABLESPACE pg_default;
seminar:
CREATE TABLE IF NOT EXISTS public.seminar(
"seminarID" integer NOT NULL,
oberbegriff character varying COLLATE pg_catalog."default" NOT NULL,
beschreibung character varying COLLATE pg_catalog."default" NOT NULL,
semester character varying COLLATE pg_catalog."default" NOT NULL,
titel character varying COLLATE pg_catalog."default" NOT NULL,
"dozent_Name" character varying COLLATE pg_catalog."default" NOT NULL,
"student_Name" character varying COLLATE pg_catalog."default",
status boolean NOT NULL,
CONSTRAINT seminar_pkey PRIMARY KEY (titel),
CONSTRAINT "dozentName" FOREIGN KEY ("dozent_Name")
REFERENCES public.dozent (nachname) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID,
CONSTRAINT "studentName" FOREIGN KEY ("student_Name")
REFERENCES public.student (nachname) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID)WITH ( OIDS = FALSE)TABLESPACE pg_default;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该在条件上使用
中的外键。
使用表别名使您的列参考较少详细。
You should use the foreign keys in the
ON
conditions.Use table aliases to make your column references less verbose.