postgresql - 如何在多对多关系中匹配所有行
问题描述
我有以下表格...
CREATE TABLE pet_owner (
id serial PRIMARY KEY,
first_name varchar(100) NOT NULL,
last_name varchar(100) NOT NULL,
phone_number varchar(50) UNIQUE,
address varchar(255)
);
CREATE TABLE pet (
id serial PRIMARY KEY,
first_name varchar(50) NOT NULL,
last_name varchar(50) NOT NULL,
breed varchar(50) NOT NULL,
weight numeric(5, 2),
date_of_birth date,
date_of_death date,
address varchar(255) NOT NULL
);
和
CREATE TABLE pet_petowner (
pet_id REFERENCES pet,
owner_id REFERENCES pet_owner,
PRIMARY KEY (pet_id, owner_id)
);
我插入到我的表pet
中,pet_owner
然后使用id
's into 插入pet_petowner
。我的问题是我现在如何查询所有pets
a owner
has 或所有owners
a pet
has。
到目前为止,我得到的是以下...
SELECT
pet.id AS id,
pet.first_name AS first_name,
pet.last_name AS last_name
FROM
pet_petowner owner_pet
JOIN pet pet ON (owner_pet.pet_id = pet.id)
WHERE
owner_pet.owner_id = 3;
这可行,但我也想有一列显示所有者的名字,但我不知道该怎么做。
解决方案
所有者的名字在pet_owner
表中。如果您想要该表中的列,则需要将其添加到联接列表中。
select
pet.id as id,
pet.first_name as first_name,
pet.last_name as last_name
po.first_name as owner_first_name
from
pet_petowner owner_pet
join pet pet on (owner_pet.pet_id = pet.id)
join pet_owner po on (po.owner_id = owner_pet.owner_id)
where
owner_pet.owner_id = 3;
注意:未测试
推荐阅读
- jquery - 如何在 data-date 中按日期对 div 进行排序
- solidity - Solidity中映射的映射
- javascript - 我可以在不弹出的情况下更改 create-react-app 中公用文件夹的名称吗?
- azure-active-directory - Azure AD B2C Graph Api - 如何获取所有组的用户
- sql - 结合 TG_TABLE_NAME 和 now() SQL 的简单触发器
- c# - 如何在 C# 中生成包含另一个模型的模型的 JSON 模式
- ios - 在 UITableView 和自定义单元格之间传递数据并存储它
- phylogeny - 在多少个内核上运行矩阵算法?
- jquery - CSS 变量不适用于多个 SVG 渐变
- coldfusion - 如何从 Array Coldfusion 中删除重复值