2017-02-27 5 views
1

多くの結合を持つクエリを処理しています。戻ってきたデータが正しいです:JOINクエリの一部であるIDによるフィルタリング

SELECT 
    cmb.item_id, 
    cmba.field_id, 
    cmba.attr_val, 
    cmba.upd_dtt, 
    cmba.upd_usr 
FROM contract_member_brg cmb 
INNER JOIN contract_member_brg_attr cmba 
    ON (cmb.item_id = cmba.item_id) where cmb.item_id=8086 
UNION 
SELECT 
    cmb.item_id, 
    ca.field_id, 
    ca.attr_val, 
    ca.upd_dtt, 
    ca.upd_usr 
FROM contract_member_brg cmb 
INNER JOIN contract_attr ca 
    ON (cmb.contract_item_id = ca.item_id) 
WHERE ca.field_id IN (413) and cmb.item_id=8086 
UNION 
SELECT 
    cmb.item_id, 
    91, 
    m.item_name, 
    m.upd_dtt, 
    m.upd_usr 
FROM contract_member_brg cmb 
INNER JOIN contract_attr ca 
    ON (cmb.contract_item_id = ca.item_id 
    AND ca.field_id = 234) 
INNER JOIN mfr m 
    ON (ca.attr_val = m.item_pk); 

私は特定のitem_idをフィルタリングしようとしています:

enter image description here

私はすべての異なる別名を持つ場所の上にWHERE句を試してみました。

このSELECT文で特定のitem_idのみを返すことができるように、このクエリにフィルタを追加することはできますか?

+0

あなたは、両方のクエリにwhere句を追加する必要があります。単に「where cmb.item_id = 8086」を2番目のクエリーに追加するだけでよいです。 –

+0

私は3つのクエリがあると思います。私がEoinSによって提案された答えに行くとすれば、 –

答えて

2

あなたの全体のクエリその上のサブクエリおよびフィルタを行います。

select * from 
(SELECT 
    cmb.item_id, 
    cmba.field_id, 
    cmba.attr_val, 
    cmba.upd_dtt, 
    cmba.upd_usr 
FROM contract_member_brg cmb 
INNER JOIN contract_member_brg_attr cmba 
    ON (cmb.item_id = cmba.item_id) where cmb.item_id=8086 
UNION 
SELECT 
    cmb.item_id, 
    ca.field_id, 
    ca.attr_val, 
    ca.upd_dtt, 
    ca.upd_usr 
FROM contract_member_brg cmb 
INNER JOIN contract_attr ca 
    ON (cmb.contract_item_id = ca.item_id) 
WHERE ca.field_id IN (413) and cmb.item_id=8086 
UNION 
SELECT 
    cmb.item_id, 
    91, 
    m.item_name, 
    m.upd_dtt, 
    m.upd_usr 
FROM contract_member_brg cmb 
INNER JOIN contract_attr ca 
    ON (cmb.contract_item_id = ca.item_id 
    AND ca.field_id = 234) 
INNER JOIN mfr m 
    ON (ca.attr_val = m.item_pk) 
) a 
where item_id = 'whatevs'; 

Here is an example to demonstrate

+0

item_id = 8086句が内部選択の中で必要ないように見えます。しかし、残りは素晴らしい! –

関連する問題