2011-11-15 86 views
0

我确定有很多方法可以做到这一点,但现在我正在努力寻找能够在给定数据的情况下正常工作的方式。SQL删除帮助?

我基本上有一张表,其中包含与其关联的附加字段以及优先于其他字段的源详细信息的重复项。所以基本上我在表中添加了一个“优先级”字段,然后根据源优先级更新。我现在需要选择不同的记录来填充我的“独特”记录表(然后我将应用唯一的关键约束来防止在需要的字段上再次发生这种情况!)...

所以我基本上,这样的事情:

Select phone, carrier, src, priority 
from dbo.mytable 

所以基本上我需要拉不同的手机上优先(1,2,3,4等)的顺序,基本上与它一起拉其他数据的其余部分并保持独特的手机。

我已经尝试了使用子选择与min(优先级)值相同的表中的一些东西,但结果仍然似乎没有道理。任何帮助将不胜感激。谢谢!

编辑我需要从同一个表中重复数据删除,但如果需要的话,我可以根据我的选择语句来填充一个新表格,以便将唯一标识符取消。这是在MSSQL中,但想通过SQL知识的任何人都可以回答。

例如,假设我有以下行:

5556667777, ATT, source1, 1 
5556667777, ATT, source2, 2 
5556667777, ATT, source3, 3 

我需要根据优先级1率先拉开的唯一身份.....问题是,我需要从删除任何其他受骗者该表格基于优先级顺序,而不再以相同的电话号码两次结束。合理?

+1

我不认为我理解你的问题。我们在这里只讨论一张桌子吗?你想*删除*重复的记录,或只是为了让一个查询不返回重复?无论如何,*究竟是什么?此外,为什么这个标签'[mysql]'和'[tsql]'? – NullUserException

+0

这是在MySQL还是MSSQL/Sybase? TSQL与标准SQL不同。 – jwiscarson

+0

您是否想要特定优先级的独特电话条目?我还不太了解这个问题。 – mkro

回答

1

所以你说组合(电话,优先级)在现有表中是唯一的,并且你想选择优先级最小的行?

SELECT mytable.phone, mytable.carrier, mytable.src 
    FROM mytable 
    INNER JOIN (
    SELECT phone, MIN(priority) AS minpriority 
     FROM mytable 
     GROUP BY phone 
) AS minphone 
    ON mytable.phone = minphone.phone 
    AND mytable.priority = minphone.minpriority