I have a question about a one-to-many relationship on the same table.
So I have this two tables:
CREATE TABLE IF NOT EXISTS public.djangoadmin_animal
(
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
name character varying(100) COLLATE pg_catalog."default" NOT NULL,
slug character varying(100) COLLATE pg_catalog."default" NOT NULL,
description text COLLATE pg_catalog."default" NOT NULL,
images character varying(100) COLLATE pg_catalog."default" NOT NULL,
date_create timestamp with time zone NOT NULL,
date_update timestamp with time zone NOT NULL,
category_id bigint NOT NULL,
CONSTRAINT djangoadmin_animal_pkey PRIMARY KEY (id),
CONSTRAINT djangoadmin_animal_category_id_3d95d2d9_fk_djangoadm FOREIGN KEY (category_id)
REFERENCES public.djangoadmin_category (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
DEFERRABLE INITIALLY DEFERRED
)
CREATE TABLE IF NOT EXISTS public.djangoadmin_category
(
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
name character varying(100) COLLATE pg_catalog."default" NOT NULL,
slug character varying(100) COLLATE pg_catalog."default" NOT NULL,
description text COLLATE pg_catalog."default" NOT NULL,
images character varying(100) COLLATE pg_catalog."default" NOT NULL,
date_create timestamp with time zone NOT NULL,
date_update timestamp with time zone NOT NULL,
category_id bigint,
CONSTRAINT djangoadmin_category_pkey PRIMARY KEY (id),
CONSTRAINT djangoadmin_category_category_id_9b327c27_fk_djangoadm FOREIGN KEY (category_id)
REFERENCES public.djangoadmin_category (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
DEFERRABLE INITIALLY DEFERRED
)
And this is some example data from the table public.djangoadmin_category:
11 "zoogdieren" "zoogdieren" "hoi" "photos/categories/1_eDJtmdP.jpg" "2023-01-27 18:25:18.624272+01" "2023-01-27 18:25:18.624272+01"
12 "amfibieen" "amfibieen" "kujhkjh" "photos/categories/1_KJDTBPc.jpg" "2023-01-27 18:25:38.444066+01" "2023-01-27 18:25:38.444066+01"
13 "vogels" "vogels" "kljhkjh" "photos/categories/1_FGkA44b.jpg" "2023-01-27 18:26:00.390812+01" "2023-01-27 18:26:00.390812+01"
16 "roofvogels" "roofvogels" "kljhkljjl" "photos/categories/1_pA0TNrX.jpg" "2023-01-27 18:29:16.101478+01" "2023-01-27 18:29:16.102479+01" 13
17 "kikkers" "kikkers" "kjhkjh" "photos/categories/1_zk2WQLP.jpg" "2023-01-27 18:29:44.073516+01" "2023-01-27 18:29:44.073516+01" 12
21 "reptielen" "reptielen" "reptielen" "photos/categories/1_EoVggfL.jpg" "2023-01-27 18:55:04.565339+01" "2023-01-27 18:55:04.565339+01"
22 "slangen" "slangen" "slangen" "photos/categories/1_w4pzls7.jpg" "2023-01-27 18:55:23.181336+01" "2023-01-27 18:55:23.181336+01" 21
23 "schildpadden" "schildpadden" "schildpadden" "photos/categories/1_RkKQ5md.jpg" "2023-01-27 18:55:51.724641+01" "2023-01-27 18:55:51.724641+01"
24 "honden" "ohhhh" "hhhh" "photos/categories/1_iUcB8K5.jpg" "2023-01-27 19:24:35.589541+01" "2023-01-27 19:24:35.590538+01" 11
25 "katten" "kjhkjh" "kjhkjh" "photos/categories/1_5LxINWC.jpg" "2023-01-27 19:24:48.07098+01" "2023-01-27 19:24:48.07098+01" 11
26 "olifanten" "olifanten" "kjhkjhkjh" "photos/categories/1_kmRFovt.jpg" "2023-01-27 19:25:05.648655+01" "2023-01-27 19:25:05.648655+01" 11
27 "krokodillen" "krokodillen" "l;l;'ll;;'l" "photos/categories/1_YuCHCct.jpg" "2023-01-27 19:27:18.06109+01" "2023-01-27 19:27:18.06109+01" 12
and here is some explanation:
So there are main groups:
- zoogdieren(mammals)
- amfibieen(amphibians)
- vogels(birds)
and you have a category:
- honden(dogs)
- katten(cats)
and they belong to the main group: zoogdieren(mammals)
My concrete question is:
Is it possible to write a query with this relationship to get all the main groups and to get all the categories?
So the query for main group will be as output:
- zoogdieren(mammals)
- amfibieen(amphibians)
- vogels(birds)
and query for example zoogdieren(mammals) will be:
- honden(dogs)
- katten(cats)
I think this is not possible. Or is it? I try it like this:
SELECT
A.name, A.category_id, B.name, B.category_id
FROM
djangoadmin_category A, djangoadmin_category B
WHERE
A.category_id = B.category_id
AND A.name = B.name
ORDER BY
A."name"