是否可以使用 PHP+ODBC 发送包含带内部连接的子查询的查询?

Is it possible to send a query with PHP+ODBC which contains a subquery with an inner join?

抱歉我的英语不好,我会尽量解释清楚我的问题。

我正在开发一个从 IBM iSeries AS/400 检索远程数据的 Web 应用程序,后端由 PHP+ODBC 组成。

我已经使用示例查询(SELECT * FROM tableA WHERE 条件)成功收集了数据,但现在我陷入了更复杂的查询。

我已经尝试了很多方法来检索我需要的数据,但我发现的唯一方法是使用一个查询来收集一个数组,我在其中存储我需要的键,然后尽可能多地进行查询作为数组中的键。

这涉及到一个可怕的结果,因为它需要一分钟多的时间,因为它必须启动太多查询。

IBM iSeries Access ODBC 驱动程序是我发现执行连接的唯一方法。

您可以在下面找到我试图通过 ODBC 转换的查询示例:

select * from 
db.TableA
where 
TableA.Column1='9999-12-31' and 
TableA.Column2='0001' and 
TableA.Column3='0' and 
TableA.bcacod IN (
select TableB.Column1 from db.TableB inner join db.TableC on TableB.Column1=TableC.Column1 where
TableB.Column2='1' and 
(TableB.Column3=0 or TableB.Column3>=" . date("Ymd") . ") 
and TableC.Column2='COM' 
and TableB.Column4='20') 
order by TableA.Column3

无论我在查询中尝试改进什么,我总是得到同样的错误:

警告:odbc_prepare():SQL 错误:[IBM][System i Access 的 ODBC 控制程序][DB2 每个 i5/OS]SQL0206 - Colonna o variabile globale TableA.Column1 non trovata., SQL state S0022

我检查了很多次,所有列的名称都是正确的。

我已经对这些字段进行了其他最简单的查询,并且它们工作正常。

我尝试过的另一件事是直接在数据库中执行查询,而且效果很好。

我的问题是:

ODBC 驱动程序是否能够执行子查询?

如果不可能,我将开始寻找其他方法来完成我需要的事情。

非常感谢大家。

阿莱西奥

要么在所有地方添加架构名称,要么在 from 子句中为 table 名称添加别名。

示例:

select * from 
db.TableA TableA
where 
TableA.Column1='9999-12-31' 
..
...
order by TableA.Column3