如何从表中选择组不包含值的行

时间:2019-01-18 09:22:27

标签: mysql sql

我有一个包含以下字段的表:

  

日期,时间,课程,或,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”

4 个答案:

答案 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);

Demo

答案 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)