0

我有问题。我有 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_idandwp_fs_reports.form_id可以有值 ('0') 不存在于wp_rg_form.idand中wp_fs_agents.id。所以它只会输出存在的值。问题是,是否可以输出提到的值 = 0的那些行,用“All”替换那些行中的wp_fs_agents.nameand ;wp_rg_form.title我认为,更换它会像

IF(`agent_id` = '0', 'All', `wp_fs_agents`.`name`) as `name
4

2 回答 2

1

您可以左连接到wp_fs_agents表,其中将包括wp_fs_reports没有agent_idin 的行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中未表示零以外的值wp_fs_agents,它们也会出现在结果中,因此您需要其他方法来排除它们。

于 2013-06-28T19:12:06.810 回答
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`)
于 2013-06-28T19:08:38.203 回答