这里是初学者。我正在将 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
=SalesOrder
。 SalesOrderId
)),1,Max( SOItem
.`SOIte' 在第 2 行
任何帮助将不胜感激。 -丹
最佳答案
语法 SOItemId.SalesOrderId
意味着您正在引用一个名为 SOItemId
的表,该表有一个名为 SalesOrderId
的列。这显然不是您正在做的事情(没有具有该名称的表,至少没有加入到此查询中),因此这就是它向您抛出语法错误的原因。
目前尚不清楚您到底想加入什么。我建议您花更多时间查看 SQL 练习和工作代码示例。当您使用它时,请确保您了解 MAX
和 ISNULL
在 MySQL 中的工作原理。 (考虑使用 IFNULL
或 COALESCE
代替。)
关于mysql - 将access SQL转换为MYSQL,如何If(isnull(Max(插入的一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31036981/