如何选择一个东西,如果条件是假的,那么选择其他东西

时间:2014-12-26 16:34:03

标签: mysql sql

我们假设我有一张名为mytable的表:

+-----+-----+-----------+
|ID   | ID2 | product   |
+-----+-----+-----------+
|   1 | 1   | product1  |
|   2 | 2   | product1  |
|   3 | 1   | product2  |
|   4 | 4   | product2  |
|   5 | 1   | product3  |
|   6 | 1   | product4  |
|   7 | 4   | product4  |
+-----+-----+-----------+

我想选择所有id2 = 4的产品,但如果他们没有id2 = 4则显示id2 = 1

输出应为:

id  product
1   product1
4   product2
5   product3
7   product4

我可以在SQL中做这样的事情(我使用的是mysql)吗?

4 个答案:

答案 0 :(得分:1)

为此,您可以使用OR。它应该适用于这种情况,因为如果你满足第一个条件,你就会满意。如果你不这样做,你就会重新回到第二个。如果你仍然没有遇到它,那么它就不会被包括在内。试试这个:

SELECT DISTINCT product
FROM myTable
WHERE id2 = 4 OR id2 = 1;

修改

这不会选择ID,但我不确定您要如何选择ID。如果产品有id2=4两次怎么办?您会选择哪个id值?如果这不能解决您的整个问题,请告诉我,我会尝试帮助您制定完整的解决方案。

答案 1 :(得分:1)

使用条件聚合选择产品的另一个查询以及对应于id2 = 4或id2 = 2

的id
select coalesce(
      max(case when id2=4 then id end),
      max(case when id2=1 then id end)
    ) id,
    product
from mytable
where id2 in (4,1)
group by product

http://sqlfiddle.com/#!9/47050/1

答案 2 :(得分:0)

使用union allnot exists

select *
from mytable
where id2 = 4
union all
select *
from mytable t
where not exists (select 1 
                  from mytable t2 
                  where t2.product = t.product and t2.id2 = 4) 
      and t.id2 = 1;

答案 3 :(得分:0)

SELECT id, product
FROM (
    SELECT 
        id, product
       ,case id2 when 4 then 0
                       when 1 then 1
         end as preference
     FROM 
        products) as t
 ORDER BY t.preference