Firemonkey TSQLQuery не получает подзапрос sqlite в поле выбора - PullRequest
0 голосов
/ 20 апреля 2020

Кто-нибудь знает, почему в приложении C ++ Builder Firemonkey TSQLQuery не может получить поле SubQuery внутри выбора. Пожалуйста, смотрите мой код ниже, так как я не могу получить SPrice1 и SPrice2, так как он говорит, что его не существует.

Примечание: я использую C ++ Builder 10.3 Update1

Примечание: Точно такой же SQL прекрасно работает в приложениях c# и других инструментах управления Sqlite.

 myQuery->Close();

 myQuery->SQL->Text = "SELECT P.Description1,P.Code,P.Notes,L.InvoiceDate,";
 myQuery->SQL->Add("(SELECT Price FROM Prices WHERE ProductID=P.ProductID AND PriceID=:pPriceID1) AS SPrice1 ");
 myQuery->SQL->Add("(SELECT Price FROM Prices WHERE ProductID=P.ProductID AND PriceID=:pPriceID2) AS SPrice2 ");
 myQuery->SQL->Add(" FROM Products P LEFT OUTER JOIN LastPrices L ON L.ProductID=P.ProductID AND L.CustomerID=:pCustomerID WHERE P.ProductID > 0 AND P.Description LIKE '%TEST%'");

 myQuery->ParamByName("pPriceID1")->AsInteger   = PriceID1  ;
 myQuery->ParamByName("pPriceID2")->AsInteger   = PriceID2  ;
 myQuery->ParamByName("pCustomerID")->AsInteger = CustomerID;

 myQuery->Open();

Я даже пытался сделать так, чтобы они были в LEFT JOINED, и это работало только для одного запроса, получая только SPrice1, но не SPrice2

 myQuery->Close();

 myQuery->SQL->Text = "SELECT P.Description1,P.Code,P.Notes,L.InvoiceDate,P1.Price AS SPrice1,P2.Price AS SPrice2 ";
 myQuery->SQL->Add(" FROM Products P LEFT OUTER JOIN LastPrices L ON L.ProductID=P.ProductID AND L.CustomerID=:pCustomerID ");
 myQuery->SQL->Add(" LEFT JOIN Prices P1 ON P1.ProductID=P.ProductID AND P2.PriceID=:pPriceID1 ")
 myQuery->SQL->Add(" LEFT JOIN Prices P2 ON P2.ProductID=P.ProductID AND P2.PriceID=:pPriceID2 ")
 myQuery->SQL->Add("WHERE P.ProductID > 0 AND P.Description LIKE '%TEST%'");

 myQuery->ParamByName("pPriceID1")->AsInteger   = PriceID1  ;
 myQuery->ParamByName("pPriceID2")->AsInteger   = PriceID2  ;
 myQuery->ParamByName("pCustomerID")->AsInteger = CustomerID;

 myQuery->Open():
...