0

我使用 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`
4

1 回答 1

0

它确实有效,您只是误解了连接的说明(考虑到它们的文档有多简短,这是非常标准的)。

您想要的是以下内容(对于内部连接):

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

如果这也是您的应用程序经常访问的视图,您可能需要考虑在您的服务器上创建一个视图。在您的服务器上调用视图将比任何一天的查询便宜。

我希望这正是你所需要的。

于 2020-02-06T05:25:34.410 回答