Squeak.ru - шаблоны программирования

Запрос доступа, возвращающий повторяющиеся записи

У меня есть запрос, с которым я работаю в Access, который должен принимать записи, указанные в другом запросе, и изменять их. К сожалению, если раньше у меня было выбрано несколько записей, в этом новом запросе создаются дубликаты.

Например, если у меня было выбрано 2 записи, для каждой создается две одинаковых записи. Если бы у меня было выбрано 3, он создает 3 записи для каждой, всего 9 записей, когда мне нужно было только 3. Если бы у меня была только одна запись, она работала отлично.

Я читал, что это может быть проблема с соединением, но я не уверен, как это исправить.

Ниже мой код, надеюсь, я достаточно хорошо объяснил:/

   SELECT 
      GV_transfer3.[Dept ID], 
      GV_transfer3.[Existing Account], 
      GV_transfer3.Class,     
      GV_transfer3.Fund, 
      GV_transfer3.Program, 
      GV_transfer3.Project, 
      GV_transfer3.ID, 
      GV_transfer3.[project Number], 
      GV_transfer3.[Account Number], 
      GV_transfer3.Code, 
      GV_transfer3.Date, 
      GV_transfer3.Vendor, 
      'transferred from ' & Right([GV_transfer3].[Project Number],Len([GV_transfer3].[Project Number])-8) & ' to ' & Right([New Project Number],Len([New Project Number])-8) & '; ' & [GV_transfer3].[Description] AS Description1, 
      GV_transfer3.[Req By], 
      GV_transfer3.[Approved By], 
      GV_transfer3.[Proj# Number], 
      GV_transfer3.[Transferred out], 
      GV_transfer.Action, 
      -[Amount to transfer] AS Amount, 
      0 AS Reconciled, 
      'done ' & (Date()) & '; ' & [amount to transfer] & ' from ' & Right([GV_transfer3].[Project Number],Len([GV_transfer3].[Project Number])-8) & ' to ' & Right([New Project Number],Len([New Project Number])-8) & '; ' & [GV_transfer3].[Comment] AS Comment1, 
      GV_transfer3.Transfer, 
      GV_transfer3.Match, 
      IIf((Date())<=#6/30/2010#,'FY10',IIf((Date()) Between #7/1/2010# And #6/30/2011#,'FY11',IIf((Date()) Between #7/1/2011# And #6/30/2012#,'FY12','FY13'))) AS [Fiscal Year], 
      GV_transfer3.EquipGroupID, 
      GV_transfer3.EquipNumber, 
      GV_transfer3.Rep_Maint_Purchase, 
      Null AS Budget, GV_transfer.[Rel Project], 
      GV_transfer.MEIF, 
      GV_transfer.Released, 
      GV_transfer3.Proposed, GV_transfer3.Funded, 
      GV_transfer3.Declined, 
      GV_transfer3.Indirect, 
      GV_transfer3.DIC, 
      GV_transfer3.Forecast, 
      GV_transfer3.IntFunded, 
      GV_transfer3.Invoice, 
      GV_transfer3.VContract, 
      GV_transfer3.Category, 
      GV_transfer3.Activity
    FROM GV_transfer3 
    INNER JOIN GV_transfer 
    ON GV_transfer3.ID = GV_transfer.ID;
10.03.2014

  • Расскажите, почему вы присоединяетесь к GV_transfer и GV_transfer3. Какая информация отсутствует в GV_transfer3 11.03.2014
  • GV_transfer3 — это таблица, которая находится за формой, в которой вы указываете вносимые вами изменения. GV_transfer имеет исходную запись. Этот запрос должен объединить их для создания новой записи с изменениями. 11.03.2014

Ответы:


1

Это всего лишь предположение, но похоже, что у вас есть повторяющиеся строки с одинаковым идентификатором либо в GV_transfer, либо в GV_transfer3, либо в обоих. Вам нужно будет убедиться, что обе таблицы используют уникальные идентификаторы. Один из способов проверки — выполнить следующий запрос к таблицам одну за другой:

select ID, count(ID) as num_times
from GV_transfer
group by ID

... и тот же запрос для GV_transfer3 с измененным именем таблицы.

11.03.2014
  • Это идентификаторы большего числа проектов, частью которых являются записи, а не самих записей. 11.03.2014
  • А, это объясняет. Чтобы получить такое же количество выходных строк, сколько вы вводите, вы должны соединить таблицы по полям, которые однозначно идентифицируют каждую строку. Поэтому вы должны найти или создать ключ для каждой из ваших таблиц, то есть один столбец или комбинацию столбцов, которые однозначно идентифицируют каждую строку в таблице. Потом можно присоединиться по ключу. 12.03.2014
  • ДА! Я не знал, что у вас может быть несколько столбцов в качестве первичного ключа, и это то, что мне нужно было, чтобы указать мои строки. Так что спасибо, вы, наверное, только что спасли мою работу. 17.03.2014
  • Ах, тогда я рад, что ответил ????, если вы хотите узнать больше, ознакомьтесь с SQL and Relational Theory CJ Date. 17.03.2014

  • 2

    Вы можете попробовать использовать команду DISTINCT. используя SQL в доступе. Это устранит дублирование в столбце/столбцах. Создайте новый запрос и выберите текущий запрос, который вы сделали, который дал вам дублирование.

    SELECT DISTINCT("имя столбца") FROM "имя таблицы/запроса";

    Это сделает новый запрос, исключающий все дублирования. Надеюсь, это поможет.

    10.03.2014

    3

    Я бы попробовал использовать LEFT JOIN вместо INNER JOIN.

    11.03.2014
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...