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

时间:2018-05-19 07:02:40

标签: mysql sql

我有下表,其中SL是唯一值,Number列可以有2个类型A或B.我想忽略具有类型B的数字,当相同的数字也有类型A.

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

2 个答案:

答案 0 :(得分:1)

试试这个:

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'
)

Demo here

<强>解释

由于

,查询会选择所有 A
t1.Type = 'A'

所有 B,前提是 NOT EXISTS运算符的sbuquery返回 no 行。这个子查询

SELECT 1
FROM mytable t2
WHERE t2.Number = t1.Number AND t2.Type = 'A' -- t1 is a reference to the outer table
如果存在与A记录具有相同Number的{​​{1}}记录,则

会返回一行。

答案 1 :(得分:0)

&#39; B&#39;大于&#39; A&#39; 所以不能存在较小的类型。

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

这样就可以选择每个数字的最小类型。即使有额外的类型。