使用左连接从其他 table 获取最低价格

Getting minimum price from other table using left join

我正在使用左连接从两个 tables,tourtour_price 中获取数据,但是从定价 table 我无法获取 最低价格

这是我的查询

SELECT t1.id,t1.tour_title,t2.price 
FROM tours t1 
LEFT JOIN tour_dates t2 ON t1.id=t2.tour_id 
WHERE t1.status = '1' AND ( t2.price between 40 AND 100 ) 
GROUP BY t2.tour_id 
ORDER BY t2.price DESC

我想我需要做一些小改动,但想不出来。

请提供一些帮助。 谢谢。

编辑: 此答案适用于 MS SQL,不适用于 MySQL。感谢 Barmar 的评论。

尝试在 t2.price 上使用 MIN() 功能。

您还需要根据执行 select 的值进行分组,MIN() 除外,因为它是 aggregate function.

SELECT t1.id,t1.tour_title, MIN(t2.price )
FROM tours t1 
LEFT JOIN tour_dates t2 ON t1.id=t2.tour_id 
WHERE t1.status = '1' AND ( t2.price between 40 AND 100 ) 
GROUP BY t1.id,t1.tour_title
ORDER BY MIN(t2.price ) DESC

应该是:

SELECT t1.id, t1.tour_title, MIN(t2.price) min_price
FROM tours t1
LEFT JOIN tour_dates t2 ON t1.id = t2.tour_id AND t2.price BETWEEN 40 AND 100
WHERE t1.status = '1'
GROUP BY t1.id
ORDER BY min_price DESC
  • 使用MIN(t2.price)获得最低价。
  • 由于您使用的是 LEFT JOIN,第二个 table 的条件应放在 ON 子句中。否则,没有任何匹配日期的游览将被过滤掉,因为 t2.price 将是 NULL.
  • 不要使用 GROUP BY 中第二个 table 的列,因为如果没有匹配项,它将是 NULL。所有没有日期的旅行将被组合在一起作为一个结果,这不是您通常想要的。

如果您不希望结果包含没有日期的游览,您应该使用 INNER JOIN 而不是 LEFT JOIN。如果您对其中的区别感到困惑,请参阅

A Graphical Explanation of SQL Joins