【问题标题】:views/ queries for multiple foreign keys referencing same primary keys查看/查询引用相同主键的多个外键
【发布时间】:2016-05-29 03:39:50
【问题描述】:

您好,我有两张表,风险表中的 staff_id 用于查找所有者和联系人的姓名。我想知道是否可以创建一个包含所有者姓名和员工姓名的视图。我尝试创建如下所示的视图,但我只能在视图中包含所有者姓名或联系人姓名。 (作为参考,我使用的是德比)。提前致谢。

CREATE VIEW public_view AS
SELECT r.risk_id, r.risk_name s.staff_name
FROM risk r, staff s
AND r.owner_id = s.staff_id;


CREATE TABLE STAFF
(
    staff_id varchar(8) NOT NULL,
    staff_name varchar(100),
    staff_email_addr varchar(30),
    staff_position varchar(30),
    staff_sect_elem varchar(60),
    CONSTRAINT pk_staff_id PRIMARY KEY (staff_id)
);

CREATE TABLE RISK
(
    risk_id varchar(6) NOT NULL, 
    risk_name varchar(20) NOT NULL,
    risk_desc varchar(20),
    owner_id varchar(8),
    contact_id varchar(8),
    CONSTRAINT pk_risk_id PRIMARY KEY (risk_id),
    CONSTRAINT fk_owner_id FOREIGN KEY (owner_id) REFERENCES STAFF(staff_id), 
    CONSTRAINT fk_contact_id FOREIGN KEY (contact_id) REFERENCES STAFF(staff_id) 
);

【问题讨论】:

    标签: sql database derby


    【解决方案1】:

    使用表别名:

    select *
    from RISK r
    LEFT OUTER JOIN STAFF o ON r.owner_id = o.staff_id
    LEFT OUTER JOIN STAFF c ON r.contact_id = c.staff_id
    

    【讨论】:

      【解决方案2】:

      你很亲密。您需要使用连接创建一个包含两个表中的数据的表,在本例中是在 fk 上连接:

      CREATE VIEW public_view AS
      SELECT r.risk_id, r.risk_name s.staff_name
      FROM risk r
      LEFT JOIN staff s
      ON r.owner_id = s.staff_id;
      

      Left join 不会拉取 Staff 表中但 Risk 表中没有的数据。

      【讨论】:

        【解决方案3】:

        这就是我最终做的事情

        CREATE VIEW public_view1 (risk_id, risk_name, owner_name, contact_name) AS
        SELECT r.risk_id, r.risk_name, o.staff_name, c.staff_name
        FROM risk r
        LEFT OUTER JOIN staff o ON r.owner_id = o.staff_id
        LEFT OUTER JOIN staff c ON r.contact_id = c.staff_id;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-13
          • 1970-01-01
          • 1970-01-01
          • 2012-05-22
          • 2014-12-24
          • 1970-01-01
          • 1970-01-01
          • 2022-12-03
          相关资源
          最近更新 更多