【问题标题】:where condition to return some value if not match found如果未找到匹配项,则返回某个值的条件
【发布时间】:2026-01-13 11:05:01
【问题描述】:
SELECT
  PROJECT_ESTIMATES_ID,
  PIPELINE_STEP_ID
FROM
  PROJECT_ESTIMATES
WHERE
  PROJECT_BASIC_INFORMATION_ID='29ab9760-c75b-4479-882c-bc84426d55ac';

这给出了以下输出

通过将 where 条件与其他类一起使用,

SELECT
  PE.PROJECT_ESTIMATES_ID,
  MPS.STEP_DESCRIPTION
FROM
  PROJECT_ESTIMATES PE,
  MST_PIPELINE_STEPS MPS 
WHERE
  PE.`PROJECT_BASIC_INFORMATION_ID` ='29ab9760-c75b-4479-882c-bc84426d55ac' 
  AND PE.`TENANT_ID`='{0559cdcb-c63b-4c81-be91-b78Tenant1000'
  AND PE.PIPELINE_STEP_ID=MPS.PIPELINE_STEP_ID
ORDER BY
  PE.MODIFIED_DATE DESC;

给出以下输出。

我想将第一个记录的 step_description 设为 0,它的 PROJECT_ESTIMATES_ID 值为 046a190e-a895-4ce2-bb10-7a583d648b99.ie,下图显示了所需的输出。

【问题讨论】:

    标签: mysql join inner-join where outer-join


    【解决方案1】:

    如果我没有误解你的问题,这将有效:

    SELECT 
    PE.PROJECT_ESTIMATES_ID,
    IF(
    PE.PROJECT_ESTIMATES_ID = '046a190e-a895-4ce2-bb10-7a583d648b99', 
    0,
    PE.PROJECT_ESTIMATES_ID) AS STEP_DESCRIPTION
    FROM 
    PROJECT_ESTIMATES PE, 
    MST_PIPELINE_STEPS MPS 
    WHERE PE.`PROJECT_BASIC_INFORMATION_ID` ='29ab9760-c75b-4479-882c-bc84426d55ac' 
    AND PE.`TENANT_ID`='{0559cdcb-c63b-4c81-be91-b78Tenant1000' 
    AND PE.PIPELINE_STEP_ID=MPS.PIPELINE_STEP_ID 
    ORDER BY PE.MODIFIED_DATE DESC
    

    当然,除非你的意思是你想要零而不是空白或 null,在这种情况下,这就是你想要的:

    SELECT 
    PE.PROJECT_ESTIMATES_ID
    IF(
    LENGTH
    (ISNULL(
    PE.PROJECT_ESTIMATES_ID,'')) > 0,
    PE.PROJECT_ESTIMATES_ID, 0) AS STEP_DESCRIPTION
    FROM PROJECT_ESTIMATES PE, 
         MST_PIPELINE_STEPS MPS 
    WHERE PE.`PROJECT_BASIC_INFORMATION_ID` ='29ab9760-c75b-4479-882c-bc84426d55ac' 
    AND PE.`TENANT_ID`='{0559cdcb-c63b-4c81-be91-b78Tenant1000' 
    AND PE.PIPELINE_STEP_ID=MPS.PIPELINE_STEP_ID 
    ORDER BY PE.MODIFIED_DATE DESC
    

    【讨论】:

    • hi.sorry for your misunderstanding.please see the added image (desired output) 以上。
    • 我的答案与您所寻找的相差无几,我已根据您的要求对其进行了修改。
    • hi @alan 在执行 sql.Query 时出错:SELECT PE.PROJECT_ESTIMATES_ID IF(LENGTH(ISNULL(PE.PROJECT_ESTIMATES_ID,'')) > 0,PE.PROJECT_ESTIMATES_ID, 0) AS STEP_DESCRIPTION.. . 错误代码:1064
    【解决方案2】:

    这个查询满足我的要求。

    SELECT PE.PROJECT_ESTIMATES_ID, MPS.STEP_DESCRIPTION
    FROM PROJECT_ESTIMATES PE
    LEFT JOIN MST_PIPELINE_STEPS MPS
    ON PE.PIPELINE_STEP_ID=MPS.PIPELINE_STEP_ID WHERE
    PE.`PROJECT_BASIC_INFORMATION_ID` ='29ab9760-c75b-4479-882c-bc84426d55ac'
    AND PE.`TENANT_ID`='{0559cdcb-c63b-4c81-be91-b78Tenant1000' 
    ORDER BY PE.MODIFIED_DATE DESC ;
    

    【讨论】:

      最近更新 更多