我正在使用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`
答案 0 :(得分:0)
它确实有效,您只是误解了连接的说明(考虑到连接文档的简短程度,这是相当标准的。)
您想要的是以下内容(用于内部联接):
$database->select('application_configurations',
[ // join
"[><]environments" => ["active_environment_id" => "id"],
], [ // columns
'environments.name'
], [ // where
'application_configurations.application_id' => $id
]
);
如果这也是您的应用程序经常访问的视图,则可能需要考虑在服务器上对其进行查看。在服务器上调用视图将比每天查询便宜。
我希望这就是您所需要的。