簡體   English   中英

SQL Join在動態別名列上使用

[英]SQL Join using on the fly alias column

我有一些具有一對多關系的表,我需要將最新的表加入父表。

我遇到的問題是日期存儲為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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM