在 IF 条件中组合条件

Combining conditions in an IF condition

我们不能在不使用 IF

的情况下在单个 SQL 中完成此操作吗
IF (@PPRODUCT_TYPE_ID != '0')   
    SELECT * FROM PRODUCT 
    WHERE 
        PRODNAME = @pName 
    AND 
        PRODUCT_TYPE_ID IN (SELECT DISTINCT ID FROM PPRODUCT_TYPE)
ELSE
    SELECT * FROM PRODUCT 
    WHERE PRODNAME = @pName 

一种方法是:

SELECT p.*
FROM PRODUCT 
WHERE PRODNAME = @pName AND
      (@PPRODUCT_TYPE_ID <> '0' AND
       PRODUCT_TYPE_ID IN (SELECT NUMBER FROM DBO.MAKE_TABLE_USING_COMMASEPERATED_LIST(@PPRODUCT_TYPE_ID) )
      ) OR
      ( (@PPRODUCT_TYPE_ID = '0' OR @PPRODUCT_TYPE_ID IS NULL);

但是,原始版本的性能可能更好,因为两个单独的、更简单的查询比一个大型查询更容易优化(尤其是当查询使用参数时)。

试试这个

SELECT * FROM PRODUCT 
WHERE 
    PRODNAME = @pName 
AND 
    (
    (PRODUCT_TYPE_ID IN (SELECT DISTINCT ID FROM PPRODUCT_TYPE) and @PPRODUCT_TYPE_ID != '0')
     OR
     (@PPRODUCT_TYPE_ID = '0')
     )