我有一些具有一对多关系的表,我需要将最新的表加入到父表中。
我遇到的问题是日期存储为 3 列:日、月、年。这是因为如果用户不知道确切的日期,则该日期是可选字段。
为了将完整日期作为一列,我在 SELECT 语句中执行此操作,但 MySQL 告诉我不能在 ON 子句中为我的联接使用这些即时别名列。
SELECT
restaurants.*,
locations.name AS location,
files.filename AS flag,
CONCAT(p1.open_year,'-',p1.open_month,'-',COALESCE(NULLIF(p1.open_day,''), '30')) AS open_date,
CONCAT(p2.open_year,'-',p2.open_month,'-',COALESCE(NULLIF(p2.open_day,''), '30')) AS p2_open_date
FROM restaurants
LEFT JOIN locations ON restaurants.location_id = locations.id
LEFT JOIN files ON locations.flag_id = files.id
LEFT JOIN projects p1 ON (restaurants.id = p1.restaurant_id)
LEFT OUTER JOIN projects p2 ON (restaurants.id = p2.restaurant_id AND
(open_date < p2_open_date OR open_date = p2_open_date AND p1.id < p2.id))
WHERE restaurants.$by = :search
GROUP BY restaurants.id
如何根据 3 列日期获取最新行?
最佳答案
你可以在定义p1
时执行CONCAT
吗?
LEFT JOIN (SELECT
--attributes you need from projects...
CONCAT(p1.open_year,'-',p1.open_month,'-',COALESCE(NULLIF(p1.open_day,''), '30')) AS open_date
FROM projects) p1 ON (restaurants.id = p1.restaurant_id)
关于mysql - 使用即时别名列进行 SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24487028/