1

2つの異なるselectステートメントに対して同じテーブルで2つの結合を使用しています。テーブルにゼロが含まれている可能性があるため、IF関数を実装したいので、「なし」という単語をゼロに置き換えたいと考えています。

動作する私のSQLは次のとおりです。

SELECT
CONCAT(`payments`.`AssignedTo`," - ",`people2`.`FName`," ",`people2`.`LName`) AS `AssignedTo`,
CONCAT(`payments`.`PersonID`," - ",`people`.`FName`," ",`people`.`LName`) AS `PersonName`
FROM `mb_payments` as `payments`
LEFT JOIN `mb_people` AS `people` ON `people`.`PersonID` = `payments`.`PersonID`
LEFT JOIN `mb_people` AS `people2` ON `people2`.`PersonID` = `payments`.`AssignedTo`

これが機能しないIF関数を使用したSQLです。

SELECT
IF(AssignedTo IS 0,'None', CONCAT(`payments`.`AssignedTo`," - ",`people2`.`FName`," ",`people2`.`LName`)),
CONCAT(`payments`.`PersonID`," - ",`people`.`FName`," ",`people`.`LName`) AS `PersonName`
FROM `mb_payments` as `payments`
LEFT JOIN `mb_people` AS `people` ON `people`.`PersonID` = `payments`.`PersonID`
LEFT JOIN `mb_people` AS `people2` ON `people2`.`PersonID` = `payments`.`AssignedTo`
4

2 に答える 2

2

「...IS0」ではなく「..=0」が必要だと思います。NULLと比較する場合はISを使用します。

于 2012-04-10T17:20:29.430 に答える
2

この場合、CASEステートメントを使用できます。または、IFステートメントを使用する場合は、ステートメントが間違っています。そのはず:

SELECT

    IF(AssignedTo = 0,'None', CONCAT(`payments`.`AssignedTo`," - ",`people2`.`FName`," ",`people2`.`LName`)) AS Result,
    CONCAT(`payments`.`PersonID`," - ",`people`.`FName`," ",`people`.`LName`) AS `PersonName`
    FROM `mb_payments` as `payments`
    LEFT JOIN `mb_people` AS `people` ON `people`.`PersonID` = `payments`.`PersonID`
    LEFT JOIN `mb_people` AS `people2` ON `people2`.`PersonID` = `payments`.`AssignedTo`

このブログをチェックしてください:http://timmurphy.org/2009/08/13/inline-if-and-case-statements-in-mysql/

于 2012-04-10T17:23:37.907 に答える