首页 > 解决方案 > 如何在多对多关系中匹配所有行

问题描述

我有以下表格...

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。我的问题是我现在如何查询所有petsa ownerhas 或所有ownersa pethas。

到目前为止,我得到的是以下...

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;

这可行,但我也想有一列显示所有者的名字,但我不知道该怎么做。

标签: postgresqlmany-to-many

解决方案


所有者的名字在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;

注意:未测试


推荐阅读