【问题标题】:I want to get only NON-duplicate row in sqlite我只想在 sqlite 中获得非重复行
【发布时间】:2015-04-13 23:47:23
【问题描述】:

我有桌子:

+-------+-------+------+----------+
| Name  | Price | Url  | Adress   |
+-------+-------+------+----------+
| John  | Smith | blah | London 1 |
+-------+-------+------+----------+
| John  | Smith | blah | London 1 |
+-------+-------+------+----------+
| Jenny | Cole  | blah | Prague 1 |
+-------+-------+------+----------+

我想得到这个:

+-------+------+------+----------+
| Jenny | Cole | blah | Prague 1 |
+-------+------+------+----------+

我试图用创建sqlite命令,但没有结果..

【问题讨论】:

标签: sql sqlite duplicates unique


【解决方案1】:
;WITH C AS(
    SELECT 'John' AS Name , 'Smith' AS Price , 'blah' AS URL , 'London 1' AS Address
    UNION ALL
    SELECT 'John' AS Name , 'Smith' AS Price , 'blah' AS URL , 'London 1' AS Address
    UNION ALL
    SELECT 'Jenny','Cole' ,'blah' ,'Prague 1'
    UNION ALL
    SELECT 'Jenny','Cole' ,'blah' ,'Prague 2'
    UNION ALL
    SELECT 'Jenny','Cole' ,'blah' ,'Prague 3'  
)
SELECT Name, Price, URL, Address
FROM C
GROUP BY Name, Price, URL, Address
HAVING COUNT(*) = 1;

【讨论】:

  • 我试过了,我只得到一个结果,但表有 1300 个项目,每隔一个项目是重复的
  • 正如您在我的最后 3 条记录中看到的那样,它们都相同,但在 Address 中不同,因此您将获得最后 3 条。
  • 正如我在您附加的图片中看到的,您还有一些其他列没有重复。
【解决方案2】:

我想你想要这样的东西:

select Name, Price, Url, Adress
from table t
group by Name, Price, Url, Adress
having count(*) = 1;

【讨论】:

  • 这些值可能存在一些细微差别——nameURLAdress 都是(可能)可以包含隐藏字符和异常字符的字符串。在您的示例中,看起来像重复的五个中的一个实际上具有一些不同的字符 - 可能就像末尾的空格一样简单。
【解决方案3】:
Select * From your_table_name
Group By Name, Price, Url, Adress
Having Count(*) = 1;

【讨论】:

  • 这可能是 sqlite3 的问题吗?
  • 它返回 sql 行。如果要显示(结果)列,只需将 * 替换为要显示的任何列。但是 ' * ' 应该返回表中的每一列。
  • 我知道,但这不是我真正的问题:(
  • 所以检查它们是否完全相同,您可以将数据粘贴到单词或记事本中,并尝试使用 find (ctrl+f) 搜索匹配项,如果可以的话,查询应该执行它所做的,因为您确实从唯一列中获得了结果。请记住,即使有像性格差异这样的小变化,它也很重要。
猜你喜欢
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 2012-07-29
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 2018-05-04
相关资源
最近更新 更多