2013-06-28 2 views
0

문제가 있습니다. 3 개의 테이블이 있으며 선택할 때 내부 조인이 필요합니다. 일반적으로는 wp_rg_form.idwp_fs_agents.id에 존재하지 않는 ('0') 값을 가질 수있는 무언가 복잡한 MySQL 쿼리, 특정 조인

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_idwp_fs_reports.form_id

처럼 될 것입니다. 따라서 출력되는 값만 출력됩니다. 질문 : 언급 된 값 = 0 인 행을 출력 할 수 있습니까? wp_fs_agents.namewp_rg_form.title을 "All"로 바꾸십시오. 나는 당신이 가입 왼쪽을 사용하고 기능을 COALESCE 수

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

답변

1

같은 것이다 교체에 대한 생각 :

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

와우, 고마워요. –

1

당신은 wp_fs_reports 행이 포함됩니다 wp_fs_agents 테이블, 조인 왼쪽 수 없는 agent_idwp_fs_agents에서 : agent_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 

경우 0 이외의 다른 값은 wp_fs_agents 테이블에 표시되지 않으며 결과에도 포함되므로 다른 방법으로이를 제외해야합니다.

+0

고마워요,이 작품은 약간 달라야합니다. 'wp_rg_form.title' 대신'IF (wp_fs_reports.form_id = '0', 'All', wp_rg_form.title)을'title '로 지정해야합니다. 그리고 안쪽 대신에 남겨 두어야합니다. 또한 잊어 버렸습니다 (ON 후. –