【问题标题】:Multiple left joins with a CONCAT returns null带有 CONCAT 的多个左连接返回 null
【发布时间】:2021-07-28 13:31:49
【问题描述】:

我正在尝试将 3 个表连接到一个输出中,每个表都有一个唯一标识符,应该将它们连接在一起。但是,在我的一个表中,我需要将 3 列连接到一个字符串中,以便它与另一个表(表 1)中的格式匹配。当我运行我的 sql 命令时,我会为每日天气表中的所有列返回 null,这不应该是这种情况。

我为我的前 2 个表连接填充了数据,但是 dailyweather 表只返回空单元格。

我的sql命令是:

SELECT results.*,users.cityid,dailyweather.*
FROM results
LEFT JOIN users on results.id = users.id
LEFT JOIN dailyweather ON results.day = CONCAT(dailyweather.day,"-",dailyweather.month,"-",dailyweather.year) WHERE users.cityid = dailyweather.cityid

表之间应该匹配的列:

  1. Results.id = users.id
  2. Results.day = CONCAT(每日天气栏)
  3. users.cityid = dailyweather.cityid

编辑:根据@Antique-Rahman 和@Claus-Bönnhoff 在 cmets 中的要求,results.day 的格式是 tinytext/string 而不是 DateTime/Timestamp 格式

【问题讨论】:

  • so it matches the format in another table 这只是问或麻烦。规范化您的数据
  • results.day 数据类型是 DateTime 还是 Date?您可以将 CONCAT(dailyweather.day,"-",dailyweather.month,"-",dailyweather.year) 转换为 DateTime。
  • 我们需要知道 results.day 列的格式。否则我们只能猜测
  • results.day 是 tinytext 格式,不是 DateTime
  • 发布表格的样本数据。

标签: mysql


【解决方案1】:

已解决。

感兴趣的人的解决方案: 规范化您的数据。我有两个表,其中日期在一个字符串中,另一个表将日期项(日/月/年)分隔成唯一的列。以列分隔的日期在单个数字天的前面没有零填充,而日期却有。我的解决方案是我的左连接是:

results.day =CONCAT_WS("-",LPAD(dailyweather.day, 2, '0'),LPAD(dailyweather.month,2,'0'),dailyweather.year)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多