2011-08-08 5 views
1

LEFT JOIN 2テーブルを使用しようとしています。それはうまくいきます。しかし、私はsetting_valueという名前のフィールドの2つのセットを取得しています。私はtblSettingsを取得しようとしています。 setting_valueの場合のみtblAgencySettingssetting_valueはNULLです。私はこれをどうやってやりますか?私はフィールドの名前を変更することができます知っている、PHPで私はtblAgencySettingsを確認することができます。 setting_value、NULLの場合はtblSettingsを取得します。 setting_valueしかし、私はこれをMySQLに保存することを好む。MySQL Left Join、NULLの場合は、どちらか一方からフィールドを選択します。

SELECT `tblSettings`.`id`, `tblSettings`.`setting_name`, 
     `tblSettings`.`setting_value`, `tblAgencySettings`.`setting_value` 
FROM `tblSettings` LEFT JOIN `tblAgencySettings` 
ON `tblSettings`.`id` = `tblAgencySettings`.`setting_id` 
AND `tblAgencySettings`.`agency_id` = '1' 
WHERE `tblSettings`.`changeable` = '1' 

私はちょうど気付いた。私はこれに言及しなかった。 tblAgencySettings.setting_valueに値がある場合

SELECT `tblSettings`.`id`, `tblSettings`.`setting_name`, 
     COALESCE(`tblAgencySettings`.`setting_value`, `tblSettings`.`setting_value`) 
FROM `tblSettings` LEFT JOIN `tblAgencySettings` 
ON `tblSettings`.`id` = `tblAgencySettings`.`setting_id` 
AND `tblAgencySettings`.`agency_id` = '1' 
WHERE `tblSettings`.`changeable` = '1' 

COALESCE関数は、あなたがそう、このそれを与える最初の非NULL値を返します:

COALESCE(`tblAgencySettings`.`setting_value`, `tblSettings`.`setting_value`) 

をしかし変更はただ単にCOALESCEを追加tblSettings.setting_value

答えて

2

を選択し、その後1ではありませんNULLでない場合はtblAgencySettings.setting_valuetblAgencySettings.setting_valueがNULLの場合はtblSettings.setting_valueとなります。

その後、あなたの代わりに上記のCOALESCEの本を使用することができ、tblAgencySettings.setting_valueもゼロになることができますし、ということだけでなく、NULLを無視する場合:最初がtrueの場合

COALESCE(
    IF(`tblAgencySettings`.`setting_value` = 0, NULL, `tblAgencySettings`.`setting_value`), 
    `tblSettings`.`setting_value` 
) 

IF 2番目の引数を返します。 3番目の引数がfalseの場合は上記のように0をNULLに変換します。それとも、あなたはCASEステートメントにすべての道を行くことができる:

case 
    when `tblAgencySettings`.`setting_value` = 0  then `tblSettings`.`setting_value` 
    when `tblAgencySettings`.`setting_value` IS NULL then `tblSettings`.`setting_value` 
    else `tblSettings`.`setting_value` 
end  
2
はこれにあなたのSQLステートメントを変更し

SELECT `tblSettings`.`id`, `tblSettings`.`setting_name`, 
    CASE WHEN `tblSettings`.`setting_value` IS NULL THEN `tblAgencySettings`.`setting_value` 
    ELSE `tblSettings`.`setting_value` END AS `setting_value` 
    FROM `tblSettings` LEFT JOIN `tblAgencySettings` 
    ON `tblSettings`.`id` = `tblAgencySettings`.`setting_id` 
    AND `tblAgencySettings`.`agency_id` = '1' 
    WHERE `tblSettings`.`changeable` = '1' 

Here's a link to MYSQL CASE Statement for your reference.

関連する問題