2014-12-13 38 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'

相关问题