Medoo InnerJoin查询不适用于MSSQL数据库

时间:2020-01-17 12:37:17

标签: php sql-server medoo

我正在使用MSSQL作为数据库,而Medoo无法使用INNER JOIN成功执行选择查询。

这是我的查询。

$configurations = $this->database->select("application_configurations", [
  "[><]environments" => ["active_environment_id", "id"]
  ], [
    "environments.name"
  ], ["application_configurations.application_id" => $id]);

查看查询日志后,这是我发现正在输出的内容:

'SELECT [environments].[name] FROM [application_configurations] INNER JOIN [environments] USING ([active_environment_id], [id]) WHERE [application_configurations].[application_id] = 1'

MSSQL不喜欢这样:

"active_environment_id" is not a recognized table hints option.

我会这样写的:

select environments.name from application_configurations
inner join environments on environments.id = application_configurations.active_environment_id
where application_configurations.application_id = 1

非常简单的查询有效

$configurations = $this->database->select("application_configurations",
  ["active_environment_id"],
  ["application_id" => $id]
);

如何使它与MSSQL一起使用?

编辑

我尝试按照评论中的建议使用左联接查询。

它仍然不起作用,这是在后台进行的查询。

SELECT [environments].[name] FROM [application_configurations]
 LEFT JOIN [environments] USING ([active_environment_id], [id])
 WHERE [application_configurations].[application_id] = 1`

1 个答案:

答案 0 :(得分:0)

它确实有效,您只是误解了连接的说明(考虑到连接文档的简短程度,这是相当标准的。)

您想要的是以下内容(用于内部联接):

$database->select('application_configurations',
    [       //  join
        "[><]environments" => ["active_environment_id" => "id"],
    ], [    //  columns
        'environments.name'
    ], [    //  where
        'application_configurations.application_id' => $id
    ]
);

如果这也是您的应用程序经常访问的视图,则可能需要考虑在服务器上对其进行查看。在服务器上调用视图将比每天查询便宜。

我希望这就是您所需要的。

相关问题