这里的初学者。我将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。因此,如果要在SalesOrderId#10004中插入另一个PartId,则将其插入为(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服务器版本相对应的手册以获取正确的语法,以在第2行的'SOItemIdSalesOrderId = SalesOrderSalesOrderId)),1,Max(SOItem .`SOIte'附近使用

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

最佳答案

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

目前尚不清楚您正在尝试加入什么。我建议您花更多时间研究SQL练习和工作代码示例。在使用它时,请确保您了解MAXISNULL在MySQL中的工作方式。 (考虑改用IFNULLCOALESCE。)

10-03 01:07