mysql - 使用即时别名列进行 SQL 连接

标签 mysql sql join left-join alias

我有一些具有一对多关系的表,我需要将最新的表加入到父表中。

我遇到的问题是日期存储为 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/

相关文章:

sql - WHERE 子句中的多个条件

sql - 在没有 pg_lang 条目的情况下在 Postgresql 中查找存储过程语言的策略

sql - 条件值

r - 通过交叉检查 R tidyverse 中的两列来连接两个表

sql - INNER JOIN 与 INNER JOIN (SELECT . FROM)

sql - 从函数返回的记录具有连接的列

Mysql 时间算法 - 仅时间

mysql - SQL搜索日常属性错误

php - 在 PHP 中选择日期并显示结果

php - 试图从数据库中查看表,但显然我的语法不正确,尽管它与 PHPmyAdmin 上的查询匹配