mysql FIND_IN_SET得到错误的结果

b09cbbtk  于 2023-02-15  发布在  Mysql
关注(0)|答案(1)|浏览(205)

首先,我搜索了同样的问题,但没有找到合适的解决方案。
我的问题是下面的代码,它返回错误的结果:

SELECT FbID,FhID, 
       FbRef,
       FbDate, 
       (D.AccName) AS DName,
       FbQuan,
       CONCAT(CategoryName,'-',ProductName) AS ProdName,
       (C.AccName) AS CusName,
       FhPurPrice,FbSalePrice,
       (R.AccName) AS ResoName,
       Curr1.CurrencyName,
       Curr2.CurrencyName,
       Plc1.PlaceName AS FhResoPlaceName,
       Plc2.PlaceName AS FbCusPlaceName,
       'linked' AS xLinkStatus,
       1 AS xStatus 
FROM tblfatora2 F2 
INNER JOIN tblfatora1 F1 ON F1.FhRef = F2.FhRef
INNER JOIN tblproducts P ON P.ProductID = F1.FhProduct
INNER JOIN tblcategories CT ON CT.CategoryID = P.ProductCategory
INNER JOIN tblaccounts R ON R.AccID = F1.FhReso
INNER JOIN tblaccounts C ON C.AccID = F2.FbCus
INNER JOIN tblaccounts D ON D.AccID = F1.FhDriver
INNER JOIN tblcurrencies Curr1 ON C.AccCurrID = Curr1.CurrencyID
INNER JOIN tblcurrencies Curr2 ON R.AccCurrID = Curr2.CurrencyID
LEFT JOIN tblplaces Plc1 ON F1.FhResoPlace = Plc1.PlaceID
LEFT JOIN tblplaces Plc2 ON F2.FbCusPlace = Plc2.PlaceID
WHERE FIND_IN_SET(`FhID`, '18313,18314')
ORDER BY FbDate, FbID

它给我的结果是:在此输入图像描述
注意:我在这里使用FIND_IN_SET是因为我不能在www.example.com代码内的过程中使用SQL语句的地方使用(IN):vb.net code:

Public Sub MySql_GetLinked()
        xDtAll = New DataTable()

        Dim xPar(0) As MySqlParameter
        xPar(0) = New MySqlParameter("@FhID", MySqlDbType.String) With {
                                            .Value = LinkedFatora}

        xClsMySql.GetData(xSqlLinked, xDtAll, xPar)
    End Sub

所以我用循环填充变量(LinkedFatora),并使用相同的SQL语句,但我用(WHERE FIND_IN_SET('FhID ',' 18313,18314'))替换了(WHERE FIND_IN_SET('FhID ',@FhID)).
我寻找错误的原因,但没能找到。

yqyhoc1h

yqyhoc1h1#

我发现了问题,它正在将(WHERE查找输入集(FhID,“18313,18314”))更改为(WHERE查找输入集(FbID,“18313,18314”)):

SELECT FbID,FhID, 
       FbRef,
       FbDate, 
       (D.AccName) AS DName,
       FbQuan,
       CONCAT(CategoryName,'-',ProductName) AS ProdName,
       (C.AccName) AS CusName,
       FhPurPrice,FbSalePrice,
       (R.AccName) AS ResoName,
       Curr1.CurrencyName,
       Curr2.CurrencyName,
       Plc1.PlaceName AS FhResoPlaceName,
       Plc2.PlaceName AS FbCusPlaceName,
       'linked' AS xLinkStatus,
       1 AS xStatus 
FROM tblfatora2 F2 
INNER JOIN tblfatora1 F1 ON F1.FhRef = F2.FhRef
INNER JOIN tblproducts P ON P.ProductID = F1.FhProduct
INNER JOIN tblcategories CT ON CT.CategoryID = P.ProductCategory
INNER JOIN tblaccounts R ON R.AccID = F1.FhReso
INNER JOIN tblaccounts C ON C.AccID = F2.FbCus
INNER JOIN tblaccounts D ON D.AccID = F1.FhDriver
INNER JOIN tblcurrencies Curr1 ON C.AccCurrID = Curr1.CurrencyID
INNER JOIN tblcurrencies Curr2 ON R.AccCurrID = Curr2.CurrencyID
LEFT JOIN tblplaces Plc1 ON F1.FhResoPlace = Plc1.PlaceID
LEFT JOIN tblplaces Plc2 ON F2.FbCusPlace = Plc2.PlaceID
WHERE FIND_IN_SET(`FbID`, '18313,18314')
ORDER BY FbDate, FbID

相关问题