代码之家  ›  专栏  ›  技术社区  ›  Jacco

mysql:“where子句中的列'column\u name'不明确”

  •  3
  • Jacco  · 技术社区  · 16 年前

    我加入2张桌子

    例如

    table_A
    +---------+-----------+-----------+
    | user_id | ticket_id | user_name |
    +---------+-----------+-----------+
    
    table_B
    +-----------+-------------+
    | ticket_id | ticket_name |
    +-----------+-------------+
    

    如果我运行以下查询:

    SELECT
      table_A.user_id
    , table_A.user_name
    , table_B.ticket_name
    FROM table_A
    LEFT JOIN table_B ON table_B.ticket_id = table_A.ticket_id
    WHERE ticket_id = '1';
    

    在Live服务器上,我们得到错误:“ Column 'ticket_id' in where clause is ambiguous
    在测试服务器上,接受查询。

    我知道如何解决错误,这不是问题所在。

    但是,如果我们的测试服务器不接受这个查询并且(就像生产服务器一样)抛出一个错误,我将非常高兴。

    有人知道是否有某种设置会使测试服务器像实时服务器一样抛出错误吗?

    附笔。
    上的MySQL版本 测试服务器 : 5.0.32-Debian_7etch5-log
    上的MySQL版本 直播服务器 : 5.0.41-community-log

    3 回复  |  直到 16 年前
        1
  •  5
  •   kristof    16 年前

    MS SQLServer也存在类似的问题,在这种情况下,版本2000接受了一些不明确的查询,2005将抛出一个错误。基本上,新版本似乎更严格。

    作为一般规则,您应该在测试服务器和生产服务器上使用相同的DB版本,以避免这种类型的行为,即一段代码在测试机上工作而在生产上失败。

        2
  •  2
  •   Tomalak    16 年前

    什么 SQL mode 你的两个服务器在吗?我可以想象其中一个会比另一个更严格。

        3
  •  0
  •   mson    16 年前

    我认为Tomalak是对的-MySQL管理设置中有一个严格的模式,可以解决您在这个问题上的问题。

    我记得您在创建数据库时选择了它,但是您可以从管理GUI调整它。

    现在MySQL中有一些重要的错误,如果可以的话,您可能需要考虑转移到SQL Server Express…

    Sun陷入了财务困境,我不确定MySQL最终会怎么样。