我將舉一個例子來更好地闡明我想要什么:
假設我的編程語言中有以下類:
Class Person(
int id,
string name,
List<Car> cars
);
Class Car(
int id,
string name,
string brand
)
我想將其保存在 PostgreSQL 資料庫中,因此我將擁有以下表格:
CREATE TABLE person(
id SERIAL,
name TEXT
);
CREATE TABLE car(
id SERIAL,
name TEXT,
brand TEXT
)
CREATE TABLE person_car(
person_id int,
car_id int,
CONSTRAINT fk_person
FOREIGN KEY (person_id)
REFERENCES person(id),
CONSTRAINT fk_car
FOREIGN KEY (car_id)
REFERENCES car(id)
)
然后,我想從 DB 中選擇所有有車的人。我可以選擇所有人,然后為每個人選擇他們的汽車。但是假設我有 1000 人,我將不得不查詢資料庫 1001 次(一次選擇所有人,每個人一次,以獲取他們的汽車)。
有沒有一種有效的方法可以讓所有人,每個人都有他們所有的汽車在一個查詢中,這樣我就可以用正確的資料填充我的類,而無需多次查詢資料庫?
uj5u.com熱心網友回復:
如果要回傳分層資料集,可以使用帶有 的子查詢COALESCE,例如:
SELECT
p.id
p.name,
COALESCE((SELECT
json_agg(json_build_object(
'id', c.id,
'name', c.name,
'brand', c.brand
))
FROM car AS c
JOIN person_car pc ON c.id = pc.car_id
WHERE pc.person_id = p.id), '[]'::json) AS cars
FROM person AS p;
uj5u.com熱心網友回復:
您正在根據人員和汽車各自的 ID 將人員和汽車加入到 person_car 中。
SELECT
person.name,
person.id as person_id,
car.name,
car.brand,
car.id as car_id
FROM
person
JOIN
person_car
ON
person.id = person_car.person_id
JOIN
car
ON
car.id = person_car.car_id
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/515058.html
上一篇:使用googlesheet將查詢的行結果收集到一行中
下一篇:標記兩個資料幀之間不匹配的記錄
