如何获得非重复?

时间:2019-04-24 11:05:32

标签: mysql sql

我需要用SQL发出请求。

我有一个包含ID的字段。 这些ID以两种方式写入,并以“ C0”或“ E0”作为前缀,例如:“ C0121213”或“ E0121213”。

我想进行一个查询,使我可以找到以C0开头但不重复以E0开头的ID数。

也就是说,我想查找没有C0或E0对的ID。

提前谢谢

我从一个请求开始:

SELECT   *
FROM     SBYN
WHERE    ID IN (
                SELECT LID
                FROM   SBYN
                WHERE LEFT(ID,2) = 'C0'
                OR LEFT(ID, 2) = 'E0'
                GROUP BY LID HAVING COUNT(*) > 1
                )
ORDER BY ID

3 个答案:

答案 0 :(得分:2)

NOT EXISTS浮现在脑海:

SELECT COUNT(*)
FROM SBYN s
WHERE s.ID LIKE 'C0%' AND
      NOT EXISTS (SELECT 1
                  FROM SBYN s2
                  WHERE s2.ID LIKE 'E0%' AND
                        SUBSTRING(s2.ID, 2) = SUBSTRING(s.ID, 2)
                 );

如果要使用ID,请使用SELECT ID而不是SELECT COUNT(*)

答案 1 :(得分:1)

使用EXISTS

SELECT
    ID
FROM SBYN s1
WHERE
    ID LIKE 'C0%' AND
    NOT EXISTS (SELECT 1 FROM SBYN s2
                WHERE s2.ID LIKE 'E0' AND
                      SUBSTRING(s1.ID, 3) = SUBSTRING(s2.ID, 3));

答案 2 :(得分:1)

不存在:

select * from sbyn s
where not exists (
  select 1 from sbyn
  where left(id, 2) <> left(s.id, 2) and
  right(id, 3, length(id)) = right(s.id, 3, length(s.id))
)

这将返回所有非重复项。
如果您只关心以C0开头的内容,请添加到where子句:

and left(s.id) = 'C0'