【问题标题】:Sql statement error basicsql语句错误基本
【发布时间】:2016-08-26 00:14:10
【问题描述】:

仍在掌握 sql,但这似乎是一个非常基本的问题,我显然错过了一些大问题

SELECT * FROM myTable WHERE arbitraryInt < (SELECT MAX(arbitraryInt));

当我知道有任意Int 值小于最大值时,我没有返回任何行。虽然没有返回任何错误,但没有错误。提前致谢

更新:这是代码的其余部分,但 FROM 关键字仍然出错

UPDATE myTable SET arbitraryInt = arbitraryInt + 1 
WHERE primaryKey = 0001 AND arbitraryInt < (
    SELECT MAX(arbitraryInt) FROM myTable
);

我收到错误 myTable is soecified 两次

上下文正在尝试使用每个项目的排序整数使项目可手动排序。所以 MAX 的原因是为了防止该整数变得比必要的大。我确信有更好的方法可以做到这一点,但我还没有看到它。我正在寻找的结果是一个带有向上和向下箭头的表格,用于重新订购在线商店的列表项。

【问题讨论】:

  • 您可以更新选定的光标对我来说似乎很奇怪。这可能是你的问题。
  • 通过这样的排序,您最终会增加一些arbitraryInt 值,使其与MAX(arbitraryInt) 匹配,最终它们都将等于MAX()。我认为您应该允许整数值变大。一个整数将为您提供超过 20 亿个数字。

标签: mysql sql


【解决方案1】:

子查询必须是完整的查询,能够独立运行。你的子查询

(SELECT MAX(arbitraryInt))

不完整,因为它没有指定 FROM 子句。您的完整查询应该类似于

SELECT *
  FROM myTable
  WHERE arbitraryInt < (SELECT MAX(arbitraryInt)
                          FROM myTable);

【讨论】:

  • 谢谢,修复了这部分查询。在上下文中,我现在有 UPDATE myTable SET absoluteInt = absoluteInt + 1 WHERE primaryKey = 0001 AND absoluteInt
【解决方案2】:

您缺少from 子句,所以大概您打算:

SELECT *
FROM myTable
WHERE arbitraryInt < (SELECT MAX(arbitraryInt) FROM mytable);

【讨论】:

    【解决方案3】:

    这在之前的堆栈溢出中具有功能。看看MYSQL update with WHERE SELECT subquery error

    The following code seems to be something like what you are asking for
    /*
    CREATE TABLE MYTABLE (PRIMARYKEY INT, ARBITRARYID INT, AB1 INt)
    */
    
    truncate table MYTABLE;
    INSERT INTO MYTABLE
    VALUES (1,1,NULL),(1,2,NULL),(1,3,NULL);
    
    update  MYTABLE 
    set     ARBITRARYID = ARBITRARYID + 1
    where   PRIMARYKEY = 1 and
            ARBITRARYID <=  (
            SELECT MAXABID FROM
            (
            select max(ARBITRARYID) MAXABID FROM MYTABLE
            ) S
            )
    ;
    select * from MYTABLE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多