Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复杂的mysql查询,特定的连接_Mysql - Fatal编程技术网

复杂的mysql查询,特定的连接

复杂的mysql查询,特定的连接,mysql,Mysql,我有个问题。 我有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`.`age

我有个问题。 我有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`)
IF(`agent_id` = '0', 'All', `wp_fs_agents`.`name`) as `name
问题是,
wp\u fs\u报告。代理id
wp\u fs\u报告。表单id
可以有值('0'),该值在
wp\u rg\u表单.id
wp\u fs\u代理.id
中不存在。因此,它将只输出存在的值。问题是,是否可以输出上述值为0的行,将这些行中的
wp\u fs\u agent.name
wp\u rgu form.title
替换为“All”; 我想,换掉它会像

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`)
IF(`agent_id` = '0', 'All', `wp_fs_agents`.`name`) as `name

您可以使用左连接和合并功能:

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`)

您可以左键连接到
wp\u fs\u代理
表,该表将包括
wp\u fs\u报告
行,这些行在
wp\u fs\u代理
中没有
代理id

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

如果
wp\u fs\u agents
表中没有表示除零以外的
agent\u id
值,那么它们也会出现在结果中,因此您需要其他方法来排除它们。

谢谢,这是可行的,只是应该有点不同。如果(wp\u fs\u reports.form\u id='0','All',wp\u rg\u form.title)作为标题,而不是
wp\u rg\u form.title
。而不是内在的,它应该被留下。还有,你忘了(在之后)。