2014-12-13 36 views
0

需要where情況下,如果沒有找到where type='P'那麼它採取的type='C'如果沒有找到記錄,然後拿到其他地方情況在MySQL

這裏記錄是檢查表

paper_id | product_id | type 
    1   1   P 
    2   1   P 
    3   1   C 
    4   1   C 
    5   2   C 
    6   2   C 

product_id12,需要得到有type='P'沒有type='P'誰的紀錄,但這些產品的記錄,從記錄得到type='C'

查詢後需要這個結果

paper_id | product_id | type 
    1   1   P 
    2   1   P 
    5   2   C 
    6   2   C 

我嘗試

select * from table where CASE WHEN type !='P' THEN type='C' ELSE type='P'END

但不工作

+0

爲了完整性,如果他們沒有類型c呢? – Strawberry 2014-12-13 08:58:03

+0

你的意思是說,你只需要每種產品一種類型。 – Rahul 2014-12-13 09:01:09

+0

是@Rahul,需要在一次onle類型,它P是可用的然後P else C – 2014-12-13 09:10:10

回答

0
select paper_id, product_id, type from your_tab 
where type = 'P' 
union all 
select t1.paper_id, t1.product_id, t1.type from your_tab t1 
where t1.type = 'C' 
    and not exists (select 1 from your_tab t2 
        where t2.product_id = t1.product_id and t2.type = 'P'); 
+0

謝謝你的方式是正確的,但只需要使用'CASE WHEN'類型的查詢 – 2014-12-13 08:49:20

+0

@Mark Richards我在EXISTS子查詢中犯了一個小錯誤。應該是't2.product_id = t1.product_id' – Multisync 2014-12-13 08:53:59

0

也許這將幫助

SELECT DISTINCT T.PRODUCT_ID, T.PAPER_ID, T.TYPE FROM YOUR_TABLE T WHERE (CASE WHEN T.TYPE = 'P' THEN 'TRUE' WHEN T.TYPE != 'P' THEN (CASE WHEN (SELECT COUNT(*) FROM YOUR_TABLE T2 WHERE T2.PRODUCT_ID = T.PRODUCT_ID AND T2.TYPE = 'P') = 0 THEN 'TRUE' ELSE 'FALSE' END) END) = 'TRUE'

相關問題