棘手的 WHERE 条件子句
Tricky WHERE condition clause
我陷入了一个看起来很容易的困境,但我就是不能把它放在 TSQL 中。
假设我有这个 Table
Service Master
LOCAL BRGIL
EREPO CROMST
NICLI CROMST
EXPORT NIGIL
我需要忽略所有在 Master 中具有值 'CROMST' 的记录,除非 'Service' 中的值是 EREPO
到目前为止我已经试过了
WHERE (Master <> 'CROMST' AND ([Service] <> 'EREPO'))
这只显示
Service Master
LOCAL BRGIL
EXPORT NIGIL
我也试过这个
WHERE (Master <> 'CROMST' AND (rtrim([Service])+rtrim(Master) <> 'EREPOCROMST'))
仍然没有运气。
我知道这应该很容易,但我被屏蔽了
我正在寻找的结果是
Service Master
LOCAL BRGIL
EREPO CROMST
EXPORT NIGIL
尝试:
WHERE Master <> 'CROMST'
OR (([Service] = 'EREPO') AND (Master = 'CROMST'))
SELECT * FROM
your_table
WHERE (Key2 != 'CROMST' OR Key1 = 'EREPO' )
将是我的方法
使用:
where master <> 'CROMST' or Service = 'EREPO'
评估可能的情景:
- 场景:master='CROMST';服务 = 'EREPO'
- false 或 true
- 真
- 场景:master != 'CROMST';服务 = 'EREPO'
- 真或真
- 真
- 场景:master='CROMST';服务!= 'EREPO'
- false 或 false
- 假
- 场景:master != 'CROMST';服务!= 'EREPO'
- true 或 false
- 真
用例函数:
DECLARE @myTable AS TABLE
(
[SERVICE] VARCHAR(8) ,
[Master] VARCHAR(8)
);
INSERT INTO @myTable ( [SERVICE] ,
[Master]
)
VALUES ( 'LOCAL', 'BRGIL' ) ,
( 'EREPO', 'CROMST' ) ,
( 'NICLI', 'CROMST' ) ,
( 'EXPORT', 'NIGIL' );
SELECT * FROM @myTable;
SELECT *
FROM @myTable
WHERE 1 = CASE WHEN ([MASTER] = 'CROMST')
THEN
CASE WHEN ([SERVICE] = 'EREPO')
THEN 1 -- special exception
ELSE 0 --disregard all others
END
ELSE 1 -- keep
END
select *
来自 your_table 个
其中不存在 (select * 来自 your_table b 其中 b.Master = 'CROMST'
和 b.Service <> 'EREPO')
子查询查询Master值为'CROMST'但'Service'值不是'EREPO'的所有行。
"not exists"过滤掉子查询结果
我陷入了一个看起来很容易的困境,但我就是不能把它放在 TSQL 中。
假设我有这个 Table
Service Master
LOCAL BRGIL
EREPO CROMST
NICLI CROMST
EXPORT NIGIL
我需要忽略所有在 Master 中具有值 'CROMST' 的记录,除非 'Service' 中的值是 EREPO
到目前为止我已经试过了
WHERE (Master <> 'CROMST' AND ([Service] <> 'EREPO'))
这只显示
Service Master
LOCAL BRGIL
EXPORT NIGIL
我也试过这个
WHERE (Master <> 'CROMST' AND (rtrim([Service])+rtrim(Master) <> 'EREPOCROMST'))
仍然没有运气。
我知道这应该很容易,但我被屏蔽了
我正在寻找的结果是
Service Master
LOCAL BRGIL
EREPO CROMST
EXPORT NIGIL
尝试:
WHERE Master <> 'CROMST'
OR (([Service] = 'EREPO') AND (Master = 'CROMST'))
SELECT * FROM
your_table
WHERE (Key2 != 'CROMST' OR Key1 = 'EREPO' )
将是我的方法
使用:
where master <> 'CROMST' or Service = 'EREPO'
评估可能的情景:
- 场景:master='CROMST';服务 = 'EREPO'
- false 或 true
- 真
- 场景:master != 'CROMST';服务 = 'EREPO'
- 真或真
- 真
- 场景:master='CROMST';服务!= 'EREPO'
- false 或 false
- 假
- 场景:master != 'CROMST';服务!= 'EREPO'
- true 或 false
- 真
用例函数:
DECLARE @myTable AS TABLE
(
[SERVICE] VARCHAR(8) ,
[Master] VARCHAR(8)
);
INSERT INTO @myTable ( [SERVICE] ,
[Master]
)
VALUES ( 'LOCAL', 'BRGIL' ) ,
( 'EREPO', 'CROMST' ) ,
( 'NICLI', 'CROMST' ) ,
( 'EXPORT', 'NIGIL' );
SELECT * FROM @myTable;
SELECT *
FROM @myTable
WHERE 1 = CASE WHEN ([MASTER] = 'CROMST')
THEN
CASE WHEN ([SERVICE] = 'EREPO')
THEN 1 -- special exception
ELSE 0 --disregard all others
END
ELSE 1 -- keep
END
select * 来自 your_table 个 其中不存在 (select * 来自 your_table b 其中 b.Master = 'CROMST' 和 b.Service <> 'EREPO')
子查询查询Master值为'CROMST'但'Service'值不是'EREPO'的所有行。
"not exists"过滤掉子查询结果