ahmed_sa Ответов: 1

Запрос не возвращает никаких записей хотя и дает мне результат но в другой базе данных


Проблема

Как отследить этот запрос, чтобы узнать причину, по которой он возвращает нулевые записи .

запрос ниже работает в базе данных и дает мне результаты, но не дает мне никакого результата в другой базе данных

Как отладить или отследить его, чтобы узнать, почему он не дает мне никакого результата .

SELECT        TrxInvH.Trxtype, TrxInvH.TrxYear, TrxInvH.TrxSerial, TrxInvH.TrxDate, Items.ItemAraName, Items.ItemLatName, Units.UnitLatName,   
Stores.StoreAraName, Stores.StoreLatName, Units.UnitAraName, TrxInvF.displayQty, TrxInvF.Quantity, TrxInvF.Price, TrxInvF.Displayprice,   
trxtypeConfig.TrxArbName, trxtypeConfig.TrxEngName, TrxInvF.ItemCode, trxtypeConfig.BranchCode, Stores.StoreLatName AS Expr1,   
Stores.StoreAraName AS TPSTOREARA, CASE WHEN TrxInvF.Account = '' OR  
TrxInvF.Account IS NULL THEN TrxInvH.AccountID ELSE TrxInvF.Account END AS AccountCode,  
    (SELECT        AccAraName  
      FROM            Accounts  
      WHERE        (AccCode = (CASE WHEN TrxInvF.Account = '' OR  
                                TrxInvF.Account IS NULL THEN TrxInvH.AccountID ELSE TrxInvF.Account END))) AS AccaraName,  
    (SELECT        AccEngName  
      FROM            Accounts AS Accounts_3  
      WHERE        (AccCode = (CASE WHEN TrxInvF.Account = '' OR  
                                TrxInvF.Account IS NULL THEN TrxInvH.AccountID ELSE TrxInvF.Account END))) AS AccLatName, TrxInvF.SubLdgCode1,  
    (SELECT        SubLdgAraName  
      FROM            AllSubLedgerCode  
      WHERE        (TrxInvF.SubLdgCodeType1 = SubLdgTypeCode) AND (TrxInvF.SubLdgCode1 = SubLdgCode) AND (TrxInvF.BranchCode = BranchCode))   
AS SubAraName1,  
    (SELECT        SubLdgLatName  
      FROM            AllSubLedgerCode AS AllSubLedgerCode_26  
      WHERE        (TrxInvF.SubLdgCodeType1 = SubLdgTypeCode) AND (TrxInvF.SubLdgCode1 = SubLdgCode) AND (TrxInvF.BranchCode = BranchCode))   
AS SubLatName1, TrxInvF.SubLdgCode2,  
    (SELECT        SubLdgAraName  
      FROM            AllSubLedgerCode AS AllSubLedgerCode_25  
      WHERE        (TrxInvF.SubLdgCodeType2 = SubLdgTypeCode) AND (TrxInvF.SubLdgCode2 = SubLdgCode) AND (TrxInvF.BranchCode = BranchCode))   
AS SubAraName2,  
    (SELECT        SubLdgLatName  
      FROM            AllSubLedgerCode AS AllSubLedgerCode_24  
      WHERE        (TrxInvF.SubLdgCodeType2 = SubLdgTypeCode) AND (TrxInvF.SubLdgCode2 = SubLdgCode) AND (TrxInvF.BranchCode = BranchCode))   
AS SubLatName2, TrxInvF.SubLdgCode3,  
    (SELECT        SubLdgAraName  
      FROM            AllSubLedgerCode AS AllSubLedgerCode_23  
      WHERE        (TrxInvF.SubLdgCodeType3 = SubLdgTypeCode) AND (TrxInvF.SubLdgCode3 = SubLdgCode) AND (TrxInvF.BranchCode = BranchCode))   
AS SubAraName3,  
    (SELECT        SubLdgLatName  
      FROM            AllSubLedgerCode AS AllSubLedgerCode_22  
      WHERE        (TrxInvF.SubLdgCodeType3 = SubLdgTypeCode) AND (TrxInvF.SubLdgCode3 = SubLdgCode) AND (TrxInvF.BranchCode = BranchCode))   
AS SubLatName3, TrxInvF.SubLdgCode4,  
    (SELECT        SubLdgAraName  
      FROM            AllSubLedgerCode AS AllSubLedgerCode_21  
      WHERE        (TrxInvF.SubLdgCodeType4 = SubLdgTypeCode) AND (TrxInvF.SubLdgCode4 = SubLdgCode) AND (TrxInvF.BranchCode = BranchCode))   
AS SubAraName4,  
    (SELECT        SubLdgLatName  
      FROM            AllSubLedgerCode AS AllSubLedgerCode_20  
      WHERE        (TrxInvF.SubLdgCodeType4 = SubLdgTypeCode) AND (TrxInvF.SubLdgCode4 = SubLdgCode) AND (TrxInvF.BranchCode = BranchCode))   
AS SubLatName4, TrxInvF.SubLdgCode5,  
    (SELECT        SubLdgAraName  
      FROM            AllSubLedgerCode AS AllSubLedgerCode_19  
      WHERE        (TrxInvF.SubLdgCodeType5 = SubLdgTypeCode) AND (TrxInvF.SubLdgCode5 = SubLdgCode) AND (TrxInvF.BranchCode = BranchCode))   
AS SubAraName5,  
    (SELECT        SubLdgLatName  
      FROM            AllSubLedgerCode AS AllSubLedgerCode_18  
      WHERE        (TrxInvF.SubLdgCodeType5 = SubLdgTypeCode) AND (TrxInvF.SubLdgCode5 = SubLdgCode) AND (TrxInvF.BranchCode = BranchCode))   
AS SubLatName5, trxtypeConfig.CalcAvgPrice, trxtypeConfig.CalcFifoPrice, Items.AvgPrice1, Items.AvgPrice2, Items.TotalVal1, Items.TotalVal2,   
Items.TotalQty1, Items.TotalQty2, TrxInvF.CostAverage, TrxInvH.createuserid, TrxInvH.CreateDateAndTime, TrxInvH.UserId, TrxInvH.DateAndTime  
FROM            TrxInvH INNER JOIN  
TrxInvF ON TrxInvH.BranchCode = TrxInvF.BranchCode AND TrxInvH.Trxtype = TrxInvF.Trxtype AND TrxInvH.TrxYear = TrxInvF.TrxYear AND   
TrxInvH.TrxSerial = TrxInvF.TrxSerial INNER JOIN  
trxtypeConfig ON TrxInvF.BranchCode = trxtypeConfig.BranchCode AND TrxInvF.Trxtype = trxtypeConfig.trxtypecode INNER JOIN  
Units ON TrxInvF.Unitcode = Units.UnitCode INNER JOIN  
Items ON TrxInvF.ItemCode = Items.ItemCode INNER JOIN  
Stores ON TrxInvF.StoreId = Stores.StoreCode AND TrxInvF.BranchCode = Stores.BranchCode LEFT OUTER JOIN  
AllSubLedgerCode AS allsubledgercode_4 ON TrxInvF.SubLdgCode4 = allsubledgercode_4.SubLdgCode AND   
TrxInvF.SubLdgCodeType4 = allsubledgercode_4.SubLdgTypeCode AND TrxInvF.SubLdgBranch4 = allsubledgercode_4.BranchCode LEFT OUTER JOIN  
AllSubLedgerCode AS allsubledgercode_3 ON TrxInvF.SubLdgCode3 = allsubledgercode_3.SubLdgCode AND   
TrxInvF.SubLdgCodeType3 = allsubledgercode_3.SubLdgTypeCode AND TrxInvF.SubLdgBranch3 = allsubledgercode_3.BranchCode LEFT OUTER JOIN  
AllSubLedgerCode AS allsubledgercode_2 ON TrxInvF.SubLdgBranch2 = allsubledgercode_2.BranchCode AND   
TrxInvF.SubLdgCodeType1 = allsubledgercode_2.SubLdgTypeCode AND TrxInvF.SubLdgCode2 = allsubledgercode_2.SubLdgCode LEFT OUTER JOIN  
AllSubLedgerCode AS AllSubLedgerCode_17 ON TrxInvF.SubLdgCode1 = AllSubLedgerCode_17.SubLdgCode AND   
TrxInvF.SubLdgCodeType1 = AllSubLedgerCode_17.SubLdgTypeCode AND   
TrxInvF.SubLdgBranch1 = AllSubLedgerCode_17.BranchCode LEFT OUTER JOIN  
AllSubLedgerCode AS allsubledgercode_1 ON TrxInvH.BranchCode = allsubledgercode_1.BranchCode AND   
TrxInvH.TargetType = allsubledgercode_1.SubLdgTypeCode AND TrxInvH.TargetCode = allsubledgercode_1.SubLdgCode LEFT OUTER JOIN  
AllSubLedgerCode AS allsubledgercode_5 ON TrxInvF.SubLdgCode5 = allsubledgercode_5.SubLdgCode AND   
TrxInvF.SubLdgCodeType5 = allsubledgercode_5.SubLdgTypeCode AND TrxInvF.SubLdgBranch5 = allsubledgercode_5.BranchCode  WHERE 1 = 1 


Что я уже пробовал:

Запрос не возвращает никаких записей хотя и дает мне результат но в другой базе данных

PIEBALDconsult

Наверное, ему так же трудно читать, как и мне. Это очень трудно разобрать, особенно без знания соответствующих таблиц.
Я настоятельно рекомендую не использовать подзапросы, так как они, как правило, работают плохо. В последние несколько лет я использую общие табличные выражения, потому что они часто работают лучше, и я нахожу их более легкими для тестирования.

1 Ответов

Рейтинг:
0

Maciej Los

Извините, но ваш вопрос таков... уродливый.

Я подсчитал следующее количество вхождений таблиц :

TableName        NoOfFroms NoOfJoins Total
Accounts         2         0         2
AllSubLedgerCode 10        6         16 (!!!)   
TrxInvH          1         0         1
TrxInvF          0         1         1
trxtypeConfig    0         1         1
Units            0         1         1
Items            0         1         1
Stores           0         1         1


Что это значит для тебя? Поскольку AllSubLedgerCode таблица 16. раз вызывается, а производительность этого запроса далека-далека от оптимальной.

Удалите все подзапросы, которые вы используете для создания одного поля. Воспользуйся соединения[^]!
Вот отличная статья о соединениях: Визуальное представление SQL-соединений[^]

Что касается самого "Как отладить или отследить его, чтобы узнать, почему он не дает мне никакого результата."...
Следуйте по всему этому списку статей:
Устранение неполадок и анализ с помощью трассировок[^]
Как оптимизировать SQL-запросы (советы и методы)[^]
производительность запросов[^]