在 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')
)
我们不能在不使用 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')
)