2013-06-28 113 views
0

我遇到了問題。 我有3個表格,選擇時需要它們之間的內部連接。一般而言,這會是這樣的複雜的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_rg_form.idwp_fs_agents.id。所以它只會輸出存在的值。問題是,是否有可能輸出那些提到的值= 0的行,在那些行中用「全部」替代wp_fs_agents.namewp_rg_form.title; 我認爲,更換它會是這樣的

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

回答

1

您可以使用LEFT JOIN並凝聚功能:

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_agents表,其中將包括wp_fs_reports行時,沒有一個agent_idwp_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 VA他們也會出現在結果中,因此您需要其他一些方法來排除這些結果。

+0

謝謝,這個工程,除了它應該有點不同。它應該是'IF(wp_fs_reports.form_id ='0','All',wp_rg_form.title)作爲標題'而不是'wp_rg_form.title'。而不是內在的,它應該被留下。另外,你忘了(ON之後。 –