| 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: | Whole Thread | Raw Message | 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
| 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 |