我有一个包含以下字段的表:
日期,时间,课程,或,L1R,L2R,L3R
如果一个组(时间)在L3Ra列中不包含值“ 0”,我只想返回值。
我尝试了以下语句,但只删除了我希望删除整个组的那些包含“ 0”的值
SELECT *
FROM orclass t
WHERE t.l3r NOT IN
(SELECT s.l3r
FROM orclass s
WHERE s.l3r = '0')
and Thedate = "2019-01-18"
ORDER BY t.Thetime
我想做的是删除L3R列中所有包含“ 0”的组(时间)。
Thetime L1R L2R L3R
12:00 1 2 1
12:00 1 2 0
13:00 1 1 1
13:00 2 0 8
14:00 2 4 9
14:00 0 3 6
将成为:
Thetime L1R L2R L3R
13:00 1 1 1
13:00 2 0 8
14:00 2 4 9
14:00 0 3 6
因为组12:00在LR3中包含“ 0”
答案 0 :(得分:1)
您可以使用此:
SELECT *
FROM orclass o
WHERE Thedate = "2019-01-18"
AND NOT EXISTS
(
SELECT 1
FROM orclass o1
WHERE o1.Thedate = o.Thedate
AND o1.Thetime = o.Thetime
AND o1.lr3 = '0'
)
ORDER BY Thetime;
答案 1 :(得分:0)
您只需要将第一个where子句更改为t.thetime而不是t.l3r,就像这样:
SELECT *
FROM orclass t
WHERE t.Thetime NOT IN
(SELECT s.Thetime
FROM orclass s
WHERE s.l3r = '0')
and Thedate = "2019-01-18"
ORDER BY t.Thetime
答案 2 :(得分:0)
我们可以使用EXISTS
子句进行检查:
SELECT
s1.Thetime,
s1.L1R,
s1.L2R,
s1.L3R
FROM orclass s1
WHERE NOT EXISTS (SELECT 1 FROM orclass s2
WHERE s1.Thetime = s2.Thetime AND s2.L3R = 0);
答案 3 :(得分:0)
使用相关子查询
select t1.* from table_name t1
where not exists ( select 1 from table_name t2 where t2.Thetime=t1.Thetime
and L3R =0)