我们假设我有一张名为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)吗?
答案 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
的idselect 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
答案 2 :(得分:0)
使用union all
和not 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