提问人:Scanpennett 提问时间:7/28/2023 最后编辑:M SScanpennett 更新时间:8/10/2023 访问量:53
MySQL IFNULL 语法在外部查询上,当查询不返回任何记录时返回记录
MySQL IFNULL syntax on outer query to return a record when query does not return any records
问:
我正在寻找有关如何将 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))
答:
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
评论