我有一个具有以下架构的表:
| ID | BUNDLE_ID | IS_ADMIN |
Run Code Online (Sandbox Code Playgroud)
我需要根据某些标准从上表中选择具有 AND 子句的数据,即
IF @FLAG = 1
SELECT *
FROM TABLE A
WHERE A.IS_ADMIN = 1 AND BUNDLE_ID IN (3, 5)
ELSE
SELECT *
FROM TABLE A
WHERE A.IS_ADMIN = 1 AND BUNDLE_ID IN (1, 2)
Run Code Online (Sandbox Code Playgroud)
我可以在单个查询中实现这一点吗?
一般方法是使用布尔表达式重写查询,该表达式根据标志的值评估您需要的内容:
SELECT * FROM TABLE A WHERE A.IS_ADMIN = 1 AND ( -- Common part ...
(@Flag=1 AND BUNDLE_ID IN(3,5)) -- IF ...
OR
(@Flag<>1 AND BUNDLE_ID IN(1,2)) -- ELSE ...
)
Run Code Online (Sandbox Code Playgroud)
是的,这很简单。
SELECT *
FROM TABLE A
WHERE (A.IS_ADMIN = 1
AND BUNDLE_ID IN (3,5)
AND @FLAG = 1)
OR (A.IS_ADMIN = 1
AND BUNDLE_ID IN (1,2)
AND (@FLAG <> 1 OR @FLAG IS NULL))
Run Code Online (Sandbox Code Playgroud)
简单地:
SELECT *
FROM TABLE A
WHERE (A.IS_ADMIN = 1 AND BUNDLE_ID IN(3,5) AND @FLAG = 1)
OR (A.IS_ADMIN = 1 AND BUNDLE_ID IN(1,2) AND (@FLAG <> 1 OR @FLAG IS NULL))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3083 次 |
| 最近记录: |