C # - ошибка SQLite при использовании псевдонима таблицы: такого столбца нет - PullRequest
0 голосов
/ 30 мая 2018

Я запускаю следующий запрос в SQLite Management Studio (версия 2009 года), он работает нормально и возвращает желаемый набор результатов, но при выполнении из C # выдает следующую ошибку:

Нет такого столбцаQ0.IntegrationItemCategoryLevelID.

Похоже, что он не может "видеть" псевдонимы таблиц в подзапросах - я провел некоторые дополнительные тесты и не может видеть другие объединенные таблицы (например, Q0).Я попытался разделить его на два запроса, но это абсолютно убило производительность.У кого-нибудь есть хорошая идея, как это исправить?

            SELECT DISTINCT Q1.IntegrationItemCategoryLevelID, A1.ShortDesc 
            FROM ((_Item I
            INNER JOIN (_ItemToItemCategory Q0 
                INNER JOIN _ItemCategory A0 ON A0.IntegrationItemCategoryID = Q0.IntegrationItemCategoryID) ON Q0.IntegrationItemID = I.IntegrationItemID)
            INNER JOIN (_ItemToItemCategory Q1 
                INNER JOIN _ItemCategory A1 ON A1.IntegrationItemCategoryID = Q1.IntegrationItemCategoryID) ON Q1.IntegrationItemID = I.IntegrationItemID)
            WHERE Q0.IntegrationItemCategoryLevelID = 14 AND A0.ShortDesc = 'LG05'
            AND Q1.IntegrationItemCategoryLevelID IN (9,4,5,7,10) ORDER BY Q1.IntegrationItemCategoryLevelID

Редактировать: убрать лишние скобки, тот же результат.

            SELECT DISTINCT Q1.IntegrationItemCategoryLevelID, A1.ShortDesc 
            FROM Item I
            INNER JOIN (ItemToItemCategory Q0 
                INNER JOIN ItemCategory A0 ON A0.IntegrationItemCategoryID = Q0.IntegrationItemCategoryID) ON Q0.IntegrationItemID = I.IntegrationItemID
            INNER JOIN (ItemToItemCategory Q1 
                INNER JOIN ItemCategory A1 ON A1.IntegrationItemCategoryID = Q1.IntegrationItemCategoryID) ON Q1.IntegrationItemID = I.IntegrationItemID
            WHERE Q0.IntegrationItemCategoryLevelID ='14' AND A0.ShortDesc = 'LG05'
            AND Q1.IntegrationItemCategoryLevelID IN (9,4,5,7,10) ORDER BY Q1.IntegrationItemCategoryLevelID

1 Ответ

0 голосов
/ 30 мая 2018

Это ваш запрос:

SELECT DISTINCT Q1.IntegrationItemCategoryLevelID, A1.ShortDesc 
FROM ((_Item I INNER JOIN 
       (_ItemToItemCategory Q0 INNER JOIN
        _ItemCategory A0
        ON A0.IntegrationItemCategoryID = Q0.IntegrationItemCategoryID
       )
       ON Q0.IntegrationItemID = I.IntegrationItemID
      ) INNER JOIN
      (_ItemToItemCategory Q1 INNER JOIN
       _ItemCategory A1
       ON A1.IntegrationItemCategoryID = Q1.IntegrationItemCategoryID
      )
      ON Q1.IntegrationItemID = I.IntegrationItemID
     )
WHERE Q0.IntegrationItemCategoryLevelID = 14 AND
      A0.ShortDesc = 'LG05' AND
      Q1.IntegrationItemCategoryLevelID IN (9, 4, 5, 7, 10)
ORDER BY Q1.IntegrationItemCategoryLevelID;

Трудно сказать, какая именно ошибка.Я думаю, это потому, что I определено на одном слишком большом количестве вложенных уровней за последние JOIN.

Но это все внутренние соединения.И вы не используете MS Access, поэтому вы можете красиво их переставить:

SELECT DISTINCT Q1.IntegrationItemCategoryLevelID, A1.ShortDesc 
FROM _Item I INNER JOIN 
     _ItemToItemCategory Q0
     ON Q0.IntegrationItemID = I.IntegrationItemID INNER JOIN
     _ItemCategory A0
     ON A0.IntegrationItemCategoryID = Q0.IntegrationItemCategoryID INNER JOIN
     _ItemToItemCategory Q1
     ON Q1.IntegrationItemID = I.IntegrationItemID INNER JOIN
      _ItemCategory A1
     ON A1.IntegrationItemCategoryID = Q1.IntegrationItemCategoryID
WHERE Q0.IntegrationItemCategoryLevelID = 14 AND
      A0.ShortDesc = 'LG05' AND
      Q1.IntegrationItemCategoryLevelID IN (9, 4, 5, 7, 10)
ORDER BY Q1.IntegrationItemCategoryLevelID;

Если бы у вас были внешние объединения, переставить их было бы не так просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...