【问题标题】:Why does a UNION ALL query treat the outer ORDER column as unknown?为什么 UNION ALL 查询将外部 ORDER 列视为未知?
【发布时间】:2016-06-03 03:11:41
【问题描述】:

我正在使用unionAll() 并完美返回数据,但我需要对数据进行排序并始终返回错误,因为该列不存在。

$events = $this->Events
    ->find('available')
    ->where([
        'Events.group_of_event_id IS NULL'
    ])
    ->select('Events.id')
    ->select('Events.name')
    ->select('Events.slug')
    ->select('Events.date_event_start')
    ->select([
        'is_group' => 0
    ]);

$groups = $this->GroupOfEvents
    ->find('available')
    ->select('GroupOfEvents.id')
    ->select('GroupOfEvents.name')
    ->select('GroupOfEvents.slug')
    ->select('GroupOfEvents.date_event_start')
    ->select([
        'is_group' => 1
    ]);

$limit = 10;
$page = 1;

if($this->request->query('limit'))
    $limit = $this->request->query('limit');

if($this->request->query('page'))
    $page = $this->request->query('page');

$offset = ($page - 1) * $limit;

$connection = ConnectionManager::get('default');
$union = $events->unionAll($groups)->epilog(
    $connection
        ->newQuery()
        ->order(['date_event_start' => 'ASC'])
        ->limit($limit)
        ->offset($offset)
);

返回此错误:

错误:SQLSTATE[42S22]:未找到列:1054 'order 子句'中的未知列 'date_event_start'

【问题讨论】:

  • 当遇到SQL错误时,你应该从调试生成的SQL查询开始,并将它们放在你的问题中!另外,请务必提及您正在使用的 DBMS。

标签: sql cakephp cakephp-3.0 query-builder union-all


【解决方案1】:

如错误所示,没有date_event_start 列。

取消链接普通 SQL 查询,其中非表前缀列将退回到引用其中一个涉及的表,联合结果不会发生类似情况,联合结果您必须明确引用列被选中。

因此,您必须确保选择的列没有表前缀,或者在ORDER 子句中选择并使用正确的别名。为了避免歧义,我强烈建议选择后者,例如

->select(['date_event_start_alias' => 'Events.date_event_start'])

// ...

->select(['date_event_start_alias' => 'GroupOfEvents.date_event_start'])

// ...

->order(['date_event_start_alias' => 'ASC'])

应该注意,至少对于 MySQL 和 Postgres(我不确定 SQLite 或 SQL Server 等其他 DBMS),实际上您只需要为第一个 SELECT 设置别名。为所有选择设置它不会造成任何伤害,所以我将它包含在示例中,但实际上没有必要。

另见

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-20
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    相关资源
    最近更新 更多