gpt4 book ai didi

MySQL Left Join,如果为空,则从一个或另一个中选择一个字段

转载 作者:行者123 更新时间:2023-11-29 04:55:26 25 4
gpt4 key购买 nike

我正在尝试 LEFT JOIN 2 个表。效果很好。但我得到了两组名为 setting_value 的字段。我正在尝试获取 tblSettingssetting_value 仅当 tblAgencySettings.setting_value 为 NULL 时。我将如何去做这件事?我知道我可以重命名字段,然后在 PHP 中我可以检查 tblAgencySettingssetting_value 如果为 NULL,则获取 tblSettings setting_value 但我更愿意将其保留在 MySQL 中。

SELECT `tblSettings`.`id`, `tblSettings`.`setting_name`,
`tblSettings`.`setting_value`, `tblAgencySettings`.`setting_value`
FROM `tblSettings` LEFT JOIN `tblAgencySettings`
ON `tblSettings`.`id` = `tblAgencySettings`.`setting_id`
AND `tblAgencySettings`.`agency_id` = '1'
WHERE `tblSettings`.`changeable` = '1'

我刚刚注意到的小问题。我没有提到这一点。如果 tblAgencySettings.setting_value 确实有一个值。但 changeable 不是 1 然后只需选择 tblSettings.setting_value

最佳答案

只需添加一个COALESCE :

SELECT `tblSettings`.`id`, `tblSettings`.`setting_name`,
COALESCE(`tblAgencySettings`.`setting_value`, `tblSettings`.`setting_value`)
FROM `tblSettings` LEFT JOIN `tblAgencySettings`
ON `tblSettings`.`id` = `tblAgencySettings`.`setting_id`
AND `tblAgencySettings`.`agency_id` = '1'
WHERE `tblSettings`.`changeable` = '1'

COALESCE 函数返回您给它的第一个非 NULL 值,因此:

COALESCE(`tblAgencySettings`.`setting_value`, `tblSettings`.`setting_value`)

如果不是 NULL,则为 tblAgencySettings.setting_value,如果 tblAgencySettings.setting_value 为 NULL,则为 tblSettings.setting_value

如果 tblAgencySettings.setting_value 也可以为零,并且您想忽略它和 NULL,那么您可以使用它来代替上面的 COALESCE:

COALESCE(
IF(`tblAgencySettings`.`setting_value` = 0, NULL, `tblAgencySettings`.`setting_value`),
`tblSettings`.`setting_value`
)

IF如果第一个参数为真,则返回第二个参数;如果第一个参数为假,则返回第三个参数,因此上述用法将零转换为 NULL。或者,您可以一直走到 CASE。声明:

case
when `tblAgencySettings`.`setting_value` = 0 then `tblSettings`.`setting_value`
when `tblAgencySettings`.`setting_value` IS NULL then `tblSettings`.`setting_value`
else `tblSettings`.`setting_value`
end

关于MySQL Left Join,如果为空,则从一个或另一个中选择一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6977687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com