检查数据库中的重复项

时间:2015-03-05 09:03:53

标签: sql-server

我有一个数据库,其中存储了包含VATNr的用户帐户。 现在,我需要使用以下语法检查是否存在重复项:

我无法控制VATNr在数据库中的保存方式,这意味着有时它们可​​能会以“BE' BE”为前缀。有时不会。

现在,我需要确保根据以下内容没有重复:

  • 一个简单的数字
  • ' BE'然后是相同的普通数字。

这意味着2 VATNr(BE123456789)和(123456789)会产生双倍,但2 VATNr(BE123456789)和(987654312)不会导致双倍。

如何使用SQL查询执行此操作?

我考虑使用类似下面示例的SubQuery,但这不起作用:

SELECT User_ID, UserfirstName, UserLastName, Username, VatNr 
  FROM [User] Original
  WHERE VATnr LIKE '%BE' +
    ( SELECT VatNr FROM [User] WHERE VATnr != '' AND IS NOT NULL AND 
         VatNr NOT LIKE '%BE%' AND VatNr NOT LIKE '%NL%' AND VatNr NOT LIKE '%FR%' AND VatNr NOT LIKE '%DK%'
         AND VatNr NOT LIKE '%DE%' AND VatNr NOT LIKE '%ATU%' AND VatNr NOT LIKE '%LU%' AND VatNr NOT LIKE '%CHE%'
         AND VatNr NOT LIKE '%ESE%'  ) + '%'  

这确实给我以下错误:Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

1 个答案:

答案 0 :(得分:0)

我认为WHERE中的第二个条件返回重复值或更多值,您可以选择查询并检查返回值吗?或者你在条件查询中加入了区别。

SELECT DISTINCT VatNr FROM [User] WHERE VATnr != '' AND IS NOT NULL AND 
             VatNr NOT LIKE '%BE%' AND VatNr NOT LIKE '%NL%' AND VatNr NOT LIKE '%FR%' AND VatNr NOT LIKE '%DK%'
             AND VatNr NOT LIKE '%DE%' AND VatNr NOT LIKE '%ATU%' AND VatNr NOT LIKE '%LU%' AND VatNr NOT LIKE '%CHE%'
             AND VatNr NOT LIKE '%ESE%'