如何使用连接执行 Informix ISQL 查询

Posted

技术标签:

【中文标题】如何使用连接执行 Informix ISQL 查询【英文标题】:How to execute an Informix ISQL query with a join 【发布时间】:2019-04-18 22:40:57 【问题描述】:

我有一个表,其中已经包含值。我要更新的值是g_fuel_prft.billed_qty。我需要将这个表中的一个数字乘以另一个表中的一个数字来获得值。

所以表名是inv_header,其中包含inv_header.rpt_factorg_fuel_prft,其中包含g_fuel_prft.billed_qty。条件是where inv_header.link=g_fuel_prft.lnk AND inv_header.rpt_factor = 0

一旦我选择了这些行,我想将它们更新为billed_qty * rpt_factor

update g_fuel_prft
set billed_qty = (inv_header.rpt_factor * g_fuel_prft.billed_qty)
         where exists
                 (select billed_qty,ivh_rpt_factor from g_fuel_prft,inv_header
                 where g_fuel_prft.prodlnk = inv_header.ivh_link
                 and inv_header.ivh_rpt_factor = 0)

我收到 201 语法错误

【问题讨论】:

你可以尝试使用这个子查询来代替(select 1 from inv_header a where g_fuel_prft.prodlnk = a.ivh_link and ivh_rpt_factor = 0)吗? 请为每个表添加大纲架构和相关数据。否则,只能对 SQL 进行有限的测试。 【参考方案1】:

你不能这样引用inv_header.rpt_factor。您需要将其放入子查询中。

UPDATE g_fuel_prft
   SET billed_qty = ((SELECT inv_header.rpt_factor
                        FROM inv_header
                       WHERE g_fuel_prft.prodlnk = inv_header.ivh_link) *
                     g_fuel_prft.billed_qty)
 WHERE EXISTS (SELECT *
                 FROM g_fuel_prft
                 JOIN inv_header ON g_fuel_prft.prodlnk = inv_header.ivh_link
                WHERE inv_header.ivh_rpt_factor = 0)

对于 EXISTS 查询,选择列表无关紧要,* 是常规查询。您可能需要对 SET 子句中的子选择进行更多限制。这取决于连接列之间存在什么样的关系(1:1、1:N、N:1、M:N)。

鉴于下面的最小模式,上面的查询在语法上是有效的。如果没有有效的样本数据,很难对其进行测试。

DROP TABLE IF EXISTS g_fuel_prft;
CREATE TABLE g_fuel_prft
(
    prodlnk         INTEGER NOT NULL,
    billed_qty      DECIMAL(8,2) NOT NULL
);

DROP TABLE IF EXISTS inv_header;
CREATE TABLE inv_header
(
    rpt_factor      DECIMAL(8,4) NOT NULL,
    ivh_link        INTEGER NOT NULL,
    ivh_rpt_factor  DECIMAL(8,4) NOT NULL
);

【讨论】:

以上是关于如何使用连接执行 Informix ISQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ISQL Perform 中格式化 DATETIME 列的显示?.. 和其他 4.10 相关问题

Informix 查询计划

如何列出所有 Informix 数据库名称

如何在 Hsql 中执行外连接

在shell脚本中使用 isql 执行SQL语句 查询sybase数据库中满足条件的记录条数,怎么把查询结果赋给变量?

如何使用 JDBC 使用 informix 的 genxmlquery 功能?