我遇到了问题。 我有3个表,我在选择时需要内部连接。通常它会像
select `wp_fs_reports`.*,`wp_fs_agents`.`name`,`wp_rg_form`.`title` from `wp_fs_reports`
INNER JOIN `wp_rg_form` ON (`wp_fs_reports`.`form_id` = `wp_rg_form`.`id`)
INNER JOIN `wp_fs_agents` ON(`wp_fs_reports`.`agent_id` = `wp_fs_agents`.`id`)
问题是,wp_fs_reports.agent_id
和wp_fs_reports.form_id
可以具有wp_rg_form.id
和wp_fs_agents.id
中不存在的值(' 0')。因此它只会输出存在的值。问题是,是否可以输出那些提到的值= 0的行,用" All&#34 ;;替换那些行中的wp_fs_agents.name
和wp_rg_form.title
。
我认为,替换它会像
IF(`agent_id` = '0', 'All', `wp_fs_agents`.`name`) as `name
答案 0 :(得分:1)
您可以使用左JOIN和COALESCE功能:
SELECT
`wp_fs_reports`.*,
COALESCE(`wp_fs_agents`.`name`,'All'),
`wp_rg_form`.`title`
FROM
`wp_fs_reports`
LEFT JOIN `wp_rg_form` ON (`wp_fs_reports`.`form_id` = `wp_rg_form`.`id`)
LEFT JOIN `wp_fs_agents` ON(`wp_fs_reports`.`agent_id` = `wp_fs_agents`.`id`)
答案 1 :(得分:1)
您可以离开加入wp_fs_agents
表格,其中包含wp_fs_reports
行agent_id
wp_fs_agents
select
wp_fs_reports.*,
IF(wp_fs_reports.agent_id = '0', 'All', wp_fs_agents.name) as name,
wp_rg_form.title
from wp_fs_reports
INNER JOIN wp_rg_form ON wp_fs_reports.form_id = wp_rg_form.id
LEFT JOIN wp_fs_agents ON wp_fs_reports.agent_id = wp_fs_agents.id
如果agent_id
表中没有表示除{0}以外的wp_fs_agents
个值,它们也会出现在结果中,因此您需要其他一些排除它们的方法。