【问题标题】:What is the equivalent to Access' 'SELECT DISTINCTROW * FROM...' in SQLite?SQLite 中的 Access''SELECT DISTINCTROW * FROM...' 等价于什么?
【发布时间】:2011-01-12 22:15:04
【问题描述】:

我正在将数据库从 Access 转换为 SQLite,因此还必须转换/调试所有 sql 查询。遇到了这个:

SELECT DISTINCTROW * FROM table WHERE column = value ORDER BY column2;

使用 SQLite 的等效查询是什么?

【问题讨论】:

  • 这是来自 Access 95 之前的 Access 应用程序的偶然 SQL 吗?在 Access 2 和之前的版本中,SELECT DISTINCTROW 是所有 SELECT 的默认值。
  • 不确定。它只在应用程序中的一个地方使用数据库。我测试的数据库是 Access 95。不过可能。
  • 别误会我的意思:DISTINCTROW 很棒,可以解决许多可编辑性问题。但它肯定是非标准 SQL,只有在需要解决和可编辑性问题时才应使用。

标签: ms-access sqlite distinct


【解决方案1】:
SELECT DISTINCT * FROM table WHERE column = value ORDER BY column2;

由于只涉及一张表,DISTINCTROW 的行为类似于DISTINCT

【讨论】:

  • ...在这种情况下可能没有任何用处。如果您有一堆记录,其中每个值都与另一条记录中的值相同,那么您有错误的数据,并且应该质疑为什么您使用 DISTINCT 的表中有所有这些重复记录。如果表有一个主键,那么你应该使用不带关键字的 SELECT,因为 SELECT DISTINCT 不会返回任何不同于 SELECT 本身的东西。
  • @David-W-Fenton 说得对,数据库设计可能达不到标准。也许这种从 Access 到 SQLite 的转移是数据清理过程的一部分,希望得到更好的架构?
  • 不幸的是,现在没有。该项目的主要重点是转换使用 DB 的应用程序,但重新设计 DB 还不是计划的一部分。或许在将来。会很好。
【解决方案2】:

等效的方法是确保您的所有表都有键,并且您正确地实现了连接和查询的其余部分。如果你这样做,那么你将永远不需要像 DISTINCTROW 这样的东西。 DISTINCTROW 只不过是 Jet 的愚蠢遗产。

SELECT * 是不好的做法。按名称列出列。

SELECT column, column1, column2
FROM table
WHERE column = value
ORDER BY column2;

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 2017-10-22
    • 2020-08-10
    • 1970-01-01
    • 2015-01-27
    • 2016-12-07
    • 2013-01-16
    • 2011-02-24
    相关资源
    最近更新 更多