2017-02-27 27 views
1

我正在查詢包含許多聯結的wthat。這回來的數據是正確的:通過作爲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」添加到第二個查詢中,您應該很好。 –

+0

哎呀我猜有三個疑問。鑑於我會採用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子句。但其餘的工作很好! –

相關問題