我有一个具有以下结构的表:
id seller class ref color pricekg
1 manta apple apple-red red 0.147
2 manta pear pear-green green 0.122
3 poma apple apple-red red 0.111
4 arnie melon melon-green green 0.889
5 pinas pineapple pinneaple-brown brown 0.890
6 gordon apple apple-red red 0.135
我需要从一些卖家那里得到一些成果,并且有一些偏好。
我的第一个目标是知道谁卖了我要寻找的东西,然后我知道了,选择最好的那个。
当我执行第一个查询时,我得到以下信息:
查询->
SELECT *
FROM `fruits`
WHERE `seller`
IN ("manta", "poma", "pinas", "gordon")
AND `class` IN ("apple", "pineapple")
ORDER BY id
结果1->
1 manta apple apple-red red 0.147
3 poma apple apple-red red 0.111
5 pinas pineapple pinneaple-brown brown 0.890
6 gordon apple apple-red red 0.135
到目前为止,还不错,但是我得到了3位卖家的红苹果代言人。
现在这是我无法解决的部分...
有了这个结果,我想过滤掉重复的苹果裁判(因为我想从一位卖家那里购买)。
如果有重复项,请选择带有卖方蝠ta的重复项。
如果有重复项,并且没有一个是卖方蝠ta,则选择每公斤成本最低的重复项。
因此,在结果1之后,第二个查询(或子查询,或者是否有一种方法可以在一个查询中完成所有操作,但我真的不知道哪种方法是最好的),预期结果将是:
1 manta apple apple-red red 0.147
5 pinas pineapple pinneaple-brown brown 0.890
或者如果manta不卖这些,那就是:
3 poma apple apple-red red 0.111
5 pinas pineapple pinneaple-brown brown 0.890
是否可以只执行一个查询? 或者我可以以某种方式从结果或时态表中进行查看,然后再执行一次查询以过滤重复项。 我该怎么办?
答案 0 :(得分:0)
这是优先级查询。
我想你想要
select f.*
from fruits f
where f.seller in ('manta', 'poma', 'pinas', 'gordon') and
f.class in ('apple', 'pineapple') and
f.id = (select f2.id
from fruits f2
where f2.seller in ('manta', 'poma', 'pinas', 'gordon') and
f2.class in ('apple', 'pineapple') and
f2.ref = f.ref
order by (f2.seller = 'manta') desc, -- put manta sellers first
f2.price asc -- then order by lowest price
limit 1
);