【问题标题】:Ambiguous Column SQL error when using a concatenated field使用连接字段时出现歧义列 SQL 错误
【发布时间】:2011-10-06 04:24:11
【问题描述】:

我正在用 CakePHP 构建一个应用程序。我有 2 个模型: - 项目 - 用户

Project 模型与用户模型有各种 belongsTo 关系,一种用于创建者,一种用于最后一个编辑器,一种用于管理器。这很好用。

然后我在 User 模型中添加一个虚拟字段,名为 'name',即 CONCAT(first_name, ' ', last_name)。它将名字和姓氏组合成一个通用名称字段,在整个应用程序中使用。

在此之后,我收到 SQL 错误,指出 first_name 列不明确。这是因为在查询中,CONCAT 字段中没有使用 Creator、Manager 等的别名。

关于如何避免这种情况的任何想法?

【问题讨论】:

    标签: mysql cakephp


    【解决方案1】:

    显示确切的查询应该有助于解决这个问题。但是,如果您要连接 2 个表,并且它们都有一个同名的列。您必须使用 TableName.ColumnName 引用该列,像这样。

    Select Table1.Column1 AS someColumn, Table2.Column1 AS SomeOtherColumn
    FROM Table1
    INNER JOIN Table2 
    ON Table1.ID = Table2.Table1ID
    WHERE Table1.ID = 3
    

    你可以通过给你的表别名来缩短它,如下所示。

    Select T1.Column1 AS someColumn, T2.Column1 AS SomeOtherColumn
    FROM Table1 AS T1
    INNER JOIN Table2  AS T2
    ON T1.ID = T2.Table1ID
    WHERE T1.ID = 3
    

    【讨论】:

    • 感谢您的回复。我知道在查询中应该这样做,但我想知道如何让 CakePHP 产生这样的查询。 virtualField 在 Contact 模型中定义。
    • 如果您使用的是 CakePHP,那么您可能需要查看其他问题。如果您尝试在连接列上指定条件,这可能会有所帮助。 stackoverflow.com/questions/6310317/…
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      尝试指定 first_name 列来自哪个表。像这样的:

      CONCAT(table1.first_name,'',table1.last_name) 
      

      【讨论】:

      • 感谢您的回复。我知道在查询中应该这样做,但我想知道如何让 CakePHP 产生这样的查询。 virtualField 在 Contact 模型中定义。
      猜你喜欢
      • 2023-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      相关资源
      最近更新 更多