所以我需要的是获得最便宜的物品价格。可以有n个价格,价格可以是周价格或日价格。我需要最便宜的价格,无论是一天还是一周的价格。我尝试使用以下查询。但我也得到一些NULL行。 其次,如果一天的价格是最便宜的,那么我需要单日价格而不是七的倍数,就像下面的查询一样。
所以下面的数据应该在搜索两个对象时得到这个:
id | oid | price | type (day or week)
-------------------------------------
2 | 1 | 65 | w
3 | 2 | 9 | d
我希望这是可以理解的。谢谢你的帮助!
对象表:
id | title
-----------
1 | Object 1
2 | Object 2
价格表:
| oid | price | type (day or week)
----------------------------------
| 1 | 10 | d
| 1 | 65 | w
| 2 | 9 | d
| 2 | 70 | w
我的查询:
SELECT o.id, p.oid, p.price, p.type
FROM objects AS o
LEFT JOIN prices AS c ON p.oid= o.id
AND p.price =
(
SELECT MIN(IF(type="w",price, price*7)) FROM prices
WHERE oid= o.id
)
LEFT JOIN ...
LEFT JOIN ...
WHERE ...
GROUP BY o.id ORDER BY p.price ASC
答案 0 :(得分:1)
要避免使用NULL行,您应该使用内部联接而不是左联接。
对于你的第二部分,我不太清楚你想做什么。
编辑:尝试此查询:
select p.id, o.id, p.price, p.type
from price as p
inner join object as o
on p.id_object = o.id
where if (p.type = "w", price, price * 7) <= (
select min(if(p.type = "w", price, price *7))
from price
where id_object = o.id
)
order by p.price asc;
答案 1 :(得分:0)
添加
AND price IS NOT NULL
到第一个SELECT中的A WHERE子句,将删除空值。
答案 2 :(得分:0)
已编辑回答:
SELECT o.id, p.price, p.type
FROM objects AS o
LEFT JOIN prices p ON p.oid= o.id
AND IF(p.type="w",p.price, p.price*7) <=
(
SELECT MIN(IF(p2.type="w",p2.price, p2.price*7)) FROM prices p2
WHERE p2.oid= o.id
)
....