A JOIN question

From: stan <stanb(at)panix(dot)com>
To: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: A JOIN question
Date: 2019-12-30 21:31:10
Message-ID: 20191230213110.GA4475@panix.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I am working on a system whee one group of folks inputs portions of data
into a table, and a 2nd completes the data for each row.

The engineers enter in the items they need into a BOM table, and purchasing
agents get quotes and create PO's. There is not a fixed relationship between
the parts (part number and manufacturers) and the vendor (mfg agent or
distributor), A project manager determines which vendor to buy various
manufacturers items from. This sis controlled by the following table:

CREATE TABLE mfg_vendor_relationship (
mfg_vendor_relationship_key_serial integer DEFAULT nextval('ica.mfg_vendor_relationship_key_serial')
PRIMARY KEY ,
mfg_key integer NOT NULL,
vendor_key integer NOT NULL,
project_key integer NOT NULL,
modtime timestamptz NOT NULL DEFAULT current_timestamp ,
FOREIGN KEY (mfg_key) references mfg(mfg_key) ON DELETE RESTRICT ,
FOREIGN KEY (vendor_key) references vendor(vendor_key) ON DELETE RESTRICT ,
FOREIGN KEY (project_key) references project(project_key) ON DELETE RESTRICT ,
CONSTRAINT mfg_vendor_constraint
UNIQUE (
mfg_key ,
vendor_key ,
project_key
)
);
So, I have the following view for the purchasing agents.

CREATE view t1 as
select
project.proj_no ,
qty ,
costing_unit.unit,
mfg_part.mfg_part_no ,
mfg.name as m_name ,
mfg_part.descrip as description ,
vendor.name as v_name ,
format_phone_no(
vendor.area_code,
vendor.phone_exchange,
vendor.phone_number,
vendor.phone_extension) office_phone ,
cast(cost_per_unit as money) ,
cast(qty * cost_per_unit as money) line_ttl ,
need_date ,
order_date ,
received_date ,
po_no ,
po_line_item ,
po_revision ,
po_rev_date ,
po_terms_and_conditions.net_interval ,
po_terms_and_conditions.discount_interval ,
po_terms_and_conditions.discount
from
bom_item
right join project on
project.project_key = bom_item.project_key
inner join mfg_part on
mfg_part.mfg_part_key = bom_item.mfg_part_key
inner join costing_unit on
costing_unit.costing_unit_key = bom_item.costing_unit_key
inner join mfg on
mfg.mfg_key = mfg_part.mfg_key
inner join mfg_vendor_relationship on
mfg_vendor_relationship.mfg_key = mfg_part.mfg_key
AND
mfg_vendor_relationship.project_key = bom_item.project_key
inner join vendor on
mfg_vendor_relationship.vendor_key = vendor.vendor_key
FULL OUTER JOIN po_terms_and_conditions ON
po_terms_and_conditions.po_terms_and_conditions_key = bom_item.po_terms_and_conditions_key
;

Now, my problem is that this join:

inner join mfg_vendor_relationship on
mfg_vendor_relationship.mfg_key = mfg_part.mfg_key
AND
mfg_vendor_relationship.project_key = bom_item.project_key

Means that the item to be purchased is invisible to the purchasing agent if
the project manager has not populated the cross reference table.

How can I modify this select so that all items for a given project will
appear in the purchasing agents view?

--
"They that would give up essential liberty for temporary safety deserve
neither liberty nor safety."
-- Benjamin Franklin

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Michael Lewis 2019-12-30 21:47:53 Re: A JOIN question
Previous Message Fabrízio de Royes Mello 2019-12-30 16:45:09 Re: Need auto fail over cluster solution for PostGres