是否可以使用 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
抱歉我的英语不好,我会尽量解释清楚我的问题。
我正在开发一个从 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