MySQL IFNULL 语法在外部查询上,当查询不返回任何记录时返回记录

MySQL IFNULL syntax on outer query to return a record when query does not return any records

提问人:Scanpennett 提问时间:7/28/2023 最后编辑:M SScanpennett 更新时间:8/10/2023 访问量:53

问:

我正在寻找有关如何将 IFNULL 应用于我的 mySQL 查询中的外部查询的指导。该查询检查前一天提交的新考勤卡,并启动将结果写入文件服务器的过程。通常没有记录,但我们仍然需要发送一个带有显示“无数据”记录的文件。我相信最好的解决方案是 IFNULL,但我的 syntex 导致错误。下面是我的原始查询,没有 IFNULL 外部查询。对 syntex 的任何帮助将不胜感激。

SELECT 
    CONCAT(r.first_name, ' ', r.last_name) 'Name',
    e.eng_no AS 'ENG_ID',
    eb.po_number AS 'PO_NUMBER',
    ne.org_name AS 'Supplier',
    uv.full_name AS 'Timecard_Approver',
    eb.po_line_number AS 'PO_Line_No',
    rt.ext_project_code AS 'Ext_Project_Code',
    rt.day_date AS 'Timecard_Date',
    rt.job_work_site AS 'Job_Work_Site',
    rt.worked_hours AS 'Total_Hours'
FROM
    raw_tcd_agg rt
        JOIN
    eng e ON rt.eng_id = e.id
        JOIN
    res r ON r.id = e.res_id
        JOIN
    eng_brt eb ON eb.id = e.cur_eng_brt_id
        AND eb.eng_id = e.id
        JOIN
    cli_ctr cc ON cc.net_id = e.net_id
        AND cc.id = eb.cli_ctr_id
        JOIN
    usr_viw uv ON e.cli_usr_id_tcd_approver = uv.id
        LEFT JOIN
    net_ent ne ON e.ven_net_ent_id = ne.id
WHERE
    e.net_id = 100
        AND e.cli_net_ent_id = 1234
        AND rt.day_date IN (SELECT 
            rtm.day_date
        FROM
            raw_tcd_agg rtm
                JOIN
            eng e2 ON e2.id = rtm.eng_id
        WHERE
            e2.net_id = 100
                AND e2.cli_net_ent_id = 1234
                AND rt.day_date = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
mysql 合并 heidisql ifnull

评论

0赞 Stu 7/28/2023
仅供参考,它是 syntax。
0赞 UncleCarl 8/10/2023
我觉得我错过了什么。如果您提供的查询导致语法错误,那么某人应该很容易给出答案,而不必猜测您做错了什么。

答:

0赞 M S 7/28/2023 #1

使用 CONCAT_WS 将名字和姓氏与中间的空格连接起来 - 如果名字和姓氏都为 NULL,则结果将为 NULL。然后使用 COALESCE 将 NULL 替换为 N/A。 HTH!

COALESCE(CONCAT_WS(' ', r.first_name, r.last_name), 'N/A') as Name

评论

0赞 Scanpennett 7/28/2023
我尝试了 COALESCE,但没有得到“无数据”的记录 SELECT COALESCE(Concat(r.first_name, “ ”, r.last_name),“NO DATA” ) AS 'Name',
0赞 Scanpennett 7/28/2023
我认为 COALESCE 或 IFNULL 需要是外部查询是错误的吗?我不需要查看子查询结果吗?
0赞 M S 8/1/2023
当 first_name 和 last_name 均为 NULL 时,连接结果为空格 (“ ”)
0赞 easleyfixed 8/10/2023
哪个“ ”甚至不是EMPTY值,它将是一个Varchar(1),因此不会测试NULL的真值,这就是你所说的@M S