mercredi 24 juin 2015

Converting access SQL to MYSQL, How to If(isnull(Max( a column on Insert

beginner here. I'm converting Access sql to MYSQL so I can run bash files and I ran into this 1 issue where 3 days of web searching as lead me no where.

I have a table with two primary fields, "SalesOrderId" and "SOItemID" So the table may look like this:

+--------------+----------+--------+
| 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    |
+--------------+----------+--------+

On insert, i need to check if the SalesOrderId exists and if so, +1 the SOItemId field for that sales record. If not then insert 1. Here is the code in Access SQL that currently works.

SQL Code:

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;

Here's my MYSQL version:

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;

I get this error:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' SOItemId.SalesOrderId = SalesOrder.SalesOrderId)),1,Max(SOItem.`SOIte' at line 2

Any help would be greatly appreciated. -Dan

Aucun commentaire:

Enregistrer un commentaire