[英]One-to-many relationship on same table, how to return each sub level?
我對同一張表上的一對多關系有疑問。
所以我有這兩個表:
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
)
這是來自表 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
這是一些解釋:
所以有主要的群體:
你有一個類別:
他們屬於主要群體:zoogdieren(哺乳動物)
我的具體問題是:
是否可以用這種關系編寫查詢以獲取所有主要組並獲取所有類別?
所以對 main group 的查詢將是 output:
查詢例如 zoogdieren(mammals) 將是:
我認為這是不可能的。 或者是嗎? 我這樣嘗試:
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"
如果我理解正確的話。 你有這個數據庫結構
Animal(Honden) --> Category(Dog) --> Category (Mammal) 這只是一個表中類別的層次結構,而另一個表中的動物屬於層次結構中任何位置的類別
你呈現的是一個非常簡單的 output,是你想要的 output 還是你想要一個 output 沿着層次結構向上走到樹的頂部?
你想要的最終 output 是什么,看起來你想要的 output 是 Animal --> Category 這是一個簡單的連接。 沿着樹向上查找主要類別有點復雜,但在大多數 SQL 引擎中非常簡單。 不同的引擎有不同的 SQL 來上樹或下樹。 查找 Oracle 的 CONNECT BY JOIN 或 PostgreSQL 的公用表表達式以獲取線索
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.