【问题标题】:Medoo InnerJoin query doesn't work on MSSQL databaseMedoo InnerJoin 查询不适用于 MSSQL 数据库
【发布时间】:2020-01-17 12:37:17
【问题描述】:

我使用 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 一起工作?

编辑

我尝试按照 cmets 中的建议使用左连接查询。

还是不行,这是在后台做的查询。

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

【问题讨论】:

  • USING ([active_environment_id], [id]) 是什么意思?似乎应该是加入的条件。喜欢ON application_configurations.active_environment_id = environments.id
  • Medoo documentation 看起来可能 "[&gt;&lt;]environments" =&gt; ["active_environment_id", "id"] 应该是 "[&gt;]environments" =&gt; ["active_environment_id" =&gt; "id"]
  • 我是这么想的,sql语句就是Medoo在后台打印出来的

标签: php sql-server medoo


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多