【问题标题】:Alternatives for MySql LIMIT 1 clause - do not want to be limitted to one RDBMSMySql LIMIT 1 子句的替代方案 - 不想被限制在一个 RDBMS
【发布时间】:2015-09-17 14:17:48
【问题描述】:

我目前正在使用 MySQL。对我来说重要的是不要在我的 C# 程序中编写任何无法转换为 SQL Server 的 SQL 语句。

是否有任何其他查询可以将 SELECT 语句的结果限制为 1 个结果?

我的目的是:

UPDATE table1 
SET table1.column = (SELECT somecolumn FROM table2 WHERE somestuff LIMIT 1);

【问题讨论】:

  • 您知道没有ORDER BYSELECT ... LIMIT 1 会导致您的更新将获得随机数据吗? LIMIT/TOP 不能解决您的问题,您需要重新考虑查询。在 SQL Server 中,您可以使用 SELECT TOP 1 somecolumn FROM table2 WHERE ...
  • 是的,我是。在我的例子中,SELECT 语句可以返回 2 个或 3 个结果,但设置的值是哪一个并不重要。
  • 所以使用UPDATE table1 SET table1.column = (SELECT DISTINCT somecolumn FROM table2 WHERE somestuff);,如果某些列是相同的
  • @lad2025 。 . .更新不会获得随机数据。它从不确定的行中获取数据,这些数据可以在执行之间更改。
  • @GordonLinoff 我的意思是,这将是不确定的,根据计划我可以获得不同的结果,因此最终用户数据将是随机的

标签: c# mysql sql-server


【解决方案1】:

如果您不在乎设置的是哪个,请使用max()min()

UPDATE table1 
    SET table1.column = (SELECT MIN(somecolumn) FROM table2 WHERE somestuff);

这是 ANSI 标准 SQL,应该适用于任何数据库。

我要提醒您的是,MySQL 和 SQL Server 功能之间的交集相当薄,忽略了有关日期和字符串的一系列函数,以及重要的查询功能,例如排名函数、完全外连接等。

【讨论】:

    【解决方案2】:

    除非我弄错了,否则您正在尝试编写通用应用程序,以便相同的查询可以全面运行。如果这是正确的理解,那么您可能走错了路。除非您的所有应用程序的范围仅限于一个查询,否则您将无法做到这一点。基本上所有数据库都支持不同格式的查询,尽管它们中的大多数彼此靠近并不意味着您必须编写通用查询。存储库模式有很多很好的实现,例如this one though XML but idea is similareven this one。阅读这些并实现这些实现,而不是追逐通用命令

    【讨论】:

      猜你喜欢
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2018-03-08
      相关资源
      最近更新 更多