mysql - 将access SQL转换为MYSQL,如何If(isnull(Max(插入的一列

标签 mysql sql if-statement max isnull

这里是初学者。我正在将 Access sql 转换为 MYSQL,以便可以运行 bash 文件,但我遇到了这 1 个问题,其中 3 天的网络搜索让我无处可去。

我有一个包含两个主要字段“SalesOrderId”和“SOItemID”的表,因此该表可能如下所示:

+--------------+----------+--------+
| SalesOrderid | SOItemId | PartId |
+--------------+----------+--------+
|   10001      |     1    |  147   |
|   10002      |     1    |  152   |
|   10003      |     1    |  152   |
|   10003      |     2    |  188   |
|   10004      |     1    |  105   |
|   10004      |     2    |  84    |
|   10004      |     3    |  209   |
|   10005      |     1    |   5    |
+--------------+----------+--------+

插入时,我需要检查 SalesOrderId 是否存在,如果存在,则 +1 SOItemId 字段并插入新记录。如果不是,则将 SOItemId 插入为 1。因此,如果我将另一个 PartId 插入 SalesOrderId# 10004,它将插入为 (10004, 4, 299)以下是 Access SQL 中当前有效的代码。

SQL 代码:

INSERT INTO SOItem ( SalesOrderId, SOItemId, PartId, CustDeliv, OnDate, Qty, UnitAmount, WebOrderProductId )
SELECT SalesOrder.SalesOrderId, If(IsNull(Max(`SOItemId`,"SOItem","SalesOrderId= " & [SalesOrderId] & " ")),1,DMax("[SOItemId]","SOItem","SalesOrderId= " & [SalesOrderId] & " ")+1) AS Expr1, ICS_Web_Parts_Link.PartId, SalesOrder.Date, SalesOrder.Date, order_product.quantity, order_product.price, order_product.order_product_id
FROM (order_product INNER JOIN ICS_Web_Parts_Link ON order_product.model = ICS_Web_Parts_Link.Model) INNER JOIN SalesOrder ON order_product.order_id = SalesOrder.WebOrderId;

这是我的 MYSQL 版本:

INSERT INTO `SOItem` ( SalesOrderId, SOItemId, PartId, CustDeliv, OnDate, Qty, UnitAmount, WebOrderProductId )
SELECT `SalesOrder`.`SalesOrderId`, If(IsNull(Max(`SOItem`.`SOItemId`, `SOItemId`.`SalesOrderId` = `SalesOrder`.`SalesOrderId`)),1,Max(`SOItem`.`SOItemId`, `SOItemId`.`SalesOrderId` = SalesOrder`.`SalesOrderId`)+1) AS Expr1, ICS_Web_Parts_Link.PartId, SalesOrder.Date, SalesOrder.Date, order_product.quantity, order_product.price, order_product.order_product_id
FROM (order_product INNER JOIN ICS_Web_Parts_Link ON order_product.model = ICS_Web_Parts_Link.Model) INNER JOIN SalesOrder ON order_product.order_id = SalesOrder.WebOrderId;

我收到此错误:

#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 ' SOItemId 附近使用的正确语法。 。 SalesOrderId =SalesOrderSalesOrderId )),1,Max( SOItem .`SOIte' 在第 2 行

任何帮助将不胜感激。 -丹

最佳答案

语法 SOItemId.SalesOrderId 意味着您正在引用一个名为 SOItemId 的表,该表有一个名为 SalesOrderId 的列。这显然不是您正在做的事情(没有具有该名称的表,至少没有加入到此查询中),因此这就是它向您抛出语法错误的原因。

目前尚不清楚您到底想加入什么。我建议您花更多时间查看 SQL 练习和工作代码示例。当您使用它时,请确保您了解 MAXISNULL 在 MySQL 中的工作原理。 (考虑使用 IFNULLCOALESCE 代替。)

关于mysql - 将access SQL转换为MYSQL,如何If(isnull(Max(插入的一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31036981/

相关文章:

php - 学习mysqli和pdo

mysql - DISTINCT COUNT 返回 SQL 错误

如果内容与现有内容相似,c++ mysql_query update将返回错误(但无法与正常错误区分开来)

mysql - 查询获取每个客户每周的平均支出

javascript - 如何防止 javascript if 语句将 0 评估为空字符串?

python - 复杂复合 bool 表达式

php - 在 Laravel 更新查询中使用数组

Sql DISTINCT 从结果中删除列

mysql 使用 LOAD DATA 更​​新表

ios - 在drawRect中的if语句问题