#mysql #sql #string #vb.net #where-clause
#mysql #sql #строка #vb.net #где-предложение
Вопрос:
Мне нужно использовать оператор IN в предложении WHERE, поэтому я попробовал следующий код с моим SQL-оператором, но он дает мне запись только для первого числа:
MyVar_AccID= "110,112,113"
Dim MyVar_SqlStr_Main As String = "SELECT
FatoraID,
FatoraRef,
FatoraCode,
FatoraDate,
(D.AccName) AS DName,
FatoraQuan,
CONCAT(CategoryName,' ',ProductName) AS ProdName,
FatoraSalePrice,
(C.AccName) AS CusName,
FatoraPurPrice,
(R.AccName) AS ResoName,
FatoraPalletQuan,
FatoraPalletPrice,
FatoraPurTotal,
FatoraCustomer,
FatoraDis,
FatoraPlus,
FatoraSaleTotal,
FatoraDriver,
FatoraCarNo,
FatoraDriverCost,
FatoraDriverCostTotal1,
FatoraDriverCostTotal2,
FatoraDriverPrice,
FatoraDriverPayStatus,
FatoraReso,
FatoraProduct,
FatoraDetails1,
FatoraDetails2,
FatoraDetails3,
(FatoraPalletQuan * FatoraPalletPrice) AS PalletTotalPrice
FROM tblfatora F
INNER JOIN tblproducts P ON
P.ProductID = F.FatoraProduct
INNER JOIN tblaccounts R ON
R.AccID = F.FatoraReso
INNER JOIN tblaccounts C ON
C.AccID = F.FatoraCustomer
LEFT JOIN tblaccounts D ON
D.AccID = F.FatoraDriver
INNER JOIN tblcategories CT ON
CT.CategoryID = P.ProductCategory
Where
(FatoraReso IN (@FatoraReso))
ORDER BY FatoraDate DESC"
xCmd = New MySqlCommand(MyVar_SqlStr_Main, Conn)
xCmd.Parameters.Add("@FatoraReso", MySqlDbType.VarChar).Value = MyVar_AccID
Я тоже пытался:
Where
(FatoraReso IN ("@FatoraReso"))
но это не дало мне результатов, как я могу решить эту проблему, пожалуйста, обратите внимание, что я не знаю количество кодов, так что, возможно, это будет (1,2,3,4,5) или меньше, или больше.
Комментарии:
1. Проблема в том, что параметризованное предложение «IN» не может принимать более одного значения. Вот один обходной путь: параметризованный в предложениях с ADO.NET и LINQ
Ответ №1:
Похоже, вы хотите проверить, принадлежит ли значение списку, разделенному запятыми. Вы не можете сделать это с IN
, который ожидает список значений, а не одну строку значений.
Общее решение использует строковые функции:
where concat(',', @fatorareso, ',') like concat('%,', fatorareso, ',%')
Однако в MySQL вы можете использовать удобную строковую функцию find_in_set()
:
where find_in_set(fatorareso, @fatorareso)
Комментарии:
1. Обратите внимание, что из-за этого запрос не сможет использовать индекс в fatorareso