Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过ODBC访问它,这对选择执行任务的最佳方法有各种影响。是的,它在Access中。很抱歉我更习惯使用SQL Server,因此以这种形式提供了数据。我将对其进行更改,以使其更清晰。清除数据后,不要忘记向SchemeNumber列添加唯一约束。事实上,为什_Sql_Performance_Ms Access - Fatal编程技术网

通过ODBC访问它,这对选择执行任务的最佳方法有各种影响。是的,它在Access中。很抱歉我更习惯使用SQL Server,因此以这种形式提供了数据。我将对其进行更改,以使其更清晰。清除数据后,不要忘记向SchemeNumber列添加唯一约束。事实上,为什

通过ODBC访问它,这对选择执行任务的最佳方法有各种影响。是的,它在Access中。很抱歉我更习惯使用SQL Server,因此以这种形式提供了数据。我将对其进行更改,以使其更清晰。清除数据后,不要忘记向SchemeNumber列添加唯一约束。事实上,为什,sql,performance,ms-access,Sql,Performance,Ms Access,通过ODBC访问它,这对选择执行任务的最佳方法有各种影响。是的,它在Access中。很抱歉我更习惯使用SQL Server,因此以这种形式提供了数据。我将对其进行更改,以使其更清晰。清除数据后,不要忘记向SchemeNumber列添加唯一约束。事实上,为什么不删除ID Autonumber列呢?让我们正视一下,这是问题的根源@有一天,当这是这个练习的目标。方案编号将成为关键-即使我不喜欢非整数的关键-不是我的设计决定!这将只删除其中一个副本,并且不考虑我的最大姓名长度要求。您是正确的。我已经用有


通过ODBC访问它,这对选择执行任务的最佳方法有各种影响。是的,它在Access中。很抱歉我更习惯使用SQL Server,因此以这种形式提供了数据。我将对其进行更改,以使其更清晰。清除数据后,不要忘记向SchemeNumber列添加唯一约束。事实上,为什么不删除ID Autonumber列呢?让我们正视一下,这是问题的根源@有一天,当这是这个练习的目标。方案编号将成为关键-即使我不喜欢非整数的关键-不是我的设计决定!这将只删除其中一个副本,并且不考虑我的最大姓名长度要求。您是正确的。我已经用有效的答案更新了帖子。
创建表somename作为SELECT…
在任何版本的MS Access中都有效吗?Access 2003甚至用一个简单的SELECT来响应“CREATE TABLE语句中的语法错误”。如果SchemeName中有两个长度相同的不同字符串,该怎么办?如果两个字符串的长度相同,则要求没有指定要保留哪一条记录,而只指定其中最长的一条。但我不确定此查询是否能在Access中工作。我在Access中尝试了此操作并删除了。。。FROM语法无效:(这几乎完美地工作了!它给我留下了一个副本,在同一个schemeNumber下有两条记录具有相同长度的不同名称-它应该删除ID较低的记录。在这种情况下,从qrySchemes2Keep的第一行和最后一行中删除r.SchemeName。还可以通过.O更改或删除顺序操作。删除较低的ID?我以为你想保留最低的ID。对不起,我的意思是说保留最低的ID(虽然剩下哪个并不重要)。它对所有其他人都有效,但在我提到的情况下,它没有删除任何一个ID。尽管如此,我将对你说的进行更改。谢谢。
ID            AutoNumber       Primary Key
SchemeName    Text (50)
SchemeNumber  Text (15)
ID            SchemeName           SchemeNumber
--------------------------------------------------------------------
714           Malcolm              ABC123
80            Malcolm              ABC123
96            Malcolms Scheme      ABC123
101           Malcolms Scheme      ABC123
98            Malcolms Scheme      DEF888
654           Another Scheme       BAR876
543           Whatever Scheme      KJL111
etc...
DELETE FROM Table t1
WHERE EXISTS (SELECT 1 from Table t2
             WHERE t1.SchemeNumber = t2.SchemeNumber
             AND Length(t2.SchemeName) > Length(t1.SchemeName)
)
   Select * From Table t
   Where Len(SchemeName) <
      (Select Max(Len(Schemename))
       From Table
       Where SchemeNumber = t.SchemeNumber )
    And Id > 
      (Select Min (Id) 
       From Table
       Where SchemeNumber = t.SchemeNumber
           And SchemeName = t.SchemeName)
   Select * From Table t
   Where Id > 
      (Select Min(Id) From Table
       Where SchemeNumber = t.SchemeNumber
         And Len(SchemeName) <
            (Select Max(Len(Schemename))
             From Table
             Where SchemeNumber = t.SchemeNumber))
   Delete 
   From Table t
   Where Len(SchemeName) <
      (Select Max(Len(Schemename))
       From Table
       Where SchemeNumber = t.SchemeNumber )
    And Id > 
      (Select Min (Id) 
       From Table
       Where SchemeNumber = t.SchemeNumber
           And SchemeName = t.SchemeName)
 Delete From Table t Where Id > 
  (Select Min(Id) From Table
   Where SchemeNumber = t.SchemeNumber
     And Len(SchemeName) <
        (Select Max(Len(Schemename))
         From Table
         Where SchemeNumber = t.SchemeNumber))
delete ShortScheme
from Scheme ShortScheme
join Scheme LongScheme
  on ShortScheme.SchemeNumber = LongScheme.SchemeNumber
  and (len(ShortScheme.SchemeName) < len(LongScheme.SchemeName) or (len(ShortScheme.SchemeName) = len(LongScheme.SchemeName) and ShortScheme.ID > LongScheme.ID))
with cte as (
  select row_number() 
     over (partition by SchemeNumber order by len(SchemeName) desc) as rn
  from Table)
delete from cte where rn > 1;
-- Setup the data
DROP Table foo;
DROP Table bar;
DROP Table bat;
DROP Table baz;
CREATE TABLE foo (
  id int(11) NOT NULL,
  SchemeName varchar(50),
  SchemeNumber varchar(15),
  PRIMARY KEY (id)
);

insert into foo values (714, 'Malcolm', 'ABC123' );
insert into foo values (80, 'Malcolm', 'ABC123' );
insert into foo values (96, 'Malcolms Scheme', 'ABC123' );
insert into foo values (101, 'Malcolms Scheme', 'ABC123' );
insert into foo values (98, 'Malcolms Scheme', 'DEF888' );
insert into foo values (654, 'Another Scheme ', 'BAR876' );
insert into foo values (543, 'Whatever Scheme ', 'KJL111' );

-- Find all the records that have dups, find the longest one
create table bar as
    select max(length(SchemeName)) as max_length, SchemeNumber
    from foo
    group by SchemeNumber
    having count(*) > 1;

-- Find the one we want to keep
create table bat as
    select min(a.id) as id, a.SchemeNumber
    from foo a join bar b on a.SchemeNumber = b.SchemeNumber 
       and length(a.SchemeName) = b.max_length
    group by SchemeNumber;

-- Select into this table all the rows to delete
create table baz as 
    select a.id from foo a join bat b where a.SchemeNumber = b.SchemeNumber 
      and a.id != b.id;
delete from foo where id in (select id from baz);
SELECT r.SchemeNumber, r.SchemeName, Min(r.ID) AS MinOfID
FROM
    (SELECT
        SchemeNumber,
        SchemeName,
        Len(SchemeName) AS name_length,
        ID
    FROM tblSchemes
    ) AS r
    INNER JOIN
    (SELECT
        SchemeNumber,
        Max(Len(SchemeName)) AS name_length
    FROM tblSchemes
    GROUP BY SchemeNumber
    ) AS w
    ON
        (r.SchemeNumber = w.SchemeNumber)
        AND (r.name_length = w.name_length)
GROUP BY r.SchemeNumber, r.SchemeName
ORDER BY r.SchemeName;
DELETE 
FROM tblSchemes AS s
WHERE Not Exists (SELECT * FROM qrySchemes2Keep WHERE MinOfID = s.ID);
DELETE s.*, Exists (SELECT * FROM qrySchemes2Keep WHERE MinOfID = s.ID)
FROM tblSchemes AS s
WHERE (((Exists (SELECT * FROM qrySchemes2Keep WHERE MinOfID = s.ID))=False));