如果一列值相等而另一列不相等,则忽略sql中的行

cuxqih21  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(405)

我有下表,其中sl是唯一值,数字列可以有2个类型a或b。当同一个数字也有类型a时,我想忽略具有类型b的数字。

SL  Number  Type
1   101     A
2   102     A
3   102     B
4   103     A
5   104     B

预期结果

SL  Number  Type
1   101     A
2   102     A
4   103     A
5   104     B
9jyewag0

9jyewag01#

试试这个:

SELECT t1.SL, t1.Number, t1.Type
FROM mytable t1
WHERE t1.Type = 'A' OR NOT EXISTS 
(
   SELECT 1
   FROM mytable t2
   WHERE t2.Number = t1.Number AND t2.Type = 'A'
)

此处演示
说明:
查询选择全部 A 行由于

t1.Type = 'A'

以及所有 B 行提供了 NOT EXISTS 运算符不返回任何行。此子查询

SELECT 1
FROM mytable t2
WHERE t2.Number = t1.Number AND t2.Type = 'A' -- t1 is a reference to the outer table

如果 A 记录,具有相同的 Number 作为 B 记录,存在。

px9o7tmv

px9o7tmv2#

“b”比“a”大。
所以一个较小的类型一定不存在。

SELECT *
FROM yourtable t
WHERE NOT EXISTS 
(
   SELECT 1
   FROM yourtable dup
   WHERE dup.Number = t.Number
     AND dup.Type < t.Type
)

这样,将选择每个数字的最小类型。即使有额外的类型。

相关问题