Можно ли основывать запрос на обновление независимо от того, равно ли количество полей 0 или нет? (MS access, SQL)

#sql #database #ms-access

Вопрос:

Краткое описание проблемы: Каждый номер партии связан с номером продукта. В зависимости от продукта на партии необходимо провести различные тесты. Если каждый тест завершен, я хочу «подписать» эту партию.

Моя проблема заключается в том, чтобы проверить, завершен ли каждый тест в пакете, и связать его результаты с запросом на обновление.

Я очень новичок в базах данных и SQL. Могу ли я решить свою проблему только с помощью SQL или мне нужно создать код макроса/vba?

=-=-=- РЕДАКТИРОВАТЬ: =-=-=-

таблицы:

-tblbatches: каждая новая созданная партия получает номер партии (текстовое поле), когда все тесты выполнены, партия подписывается, отмечая поле » Да » / «Нет».

-tbltestsperbatch: эта таблица автоматически назначает правильные тесты партии на основе ее номера продукта. Номер пакета (текстовое поле), идентификатор теста (числовое поле), Тест завершен (поле Да/Нет). Поэтому, когда партии требуется выполнить 5 тестов, создается 5 новых записей с тем же номером пакета, но с 5 разными идентификаторами Test_ID. Когда все 5 полей » Да » / » Нет «отмечены галочкой «ДА», tblBatches.При выходе необходимо автоматически поставить галочку «ДА».

tblbatches

номер партии номер продукта выход из системы
1 0001 НЕТ
2 0001 НЕТ

tbltestsperbatch

номер партии test_ID Тест Завершен
1 1 ДА
1 2 НЕТ

Теперь у меня есть рабочий SQL-код, который запускает запрос на обновление

     UPDATE tblbatches 
    SET tblbatches.signout = Yes
    WHERE batchnumber IN(
    SELECT batchnumber
    FROM( SELECT tbltestsperbatch.batchnumber,
          SUM(IIF (Test_completed = no, 1, 0)) AS CountNO
          FROM tbltestsperbatch
          GROUP BY tbltestsperbatch.batchnumber)
    WHERE CountNO = 0)
    ;
 

Является ли это эффективным способом выполнения этой задачи? Я использую 2 запроса на выбор, чтобы затем выполнить запрос на обновление. Я чувствую, что это должно быть проще сделать, но на данный момент не нашел лучшего решения.

Комментарии:

1. Вы имеете в виду количество записей вместо количества полей? Отредактируйте вопрос, чтобы показать примеры данных в виде текстовой таблицы. Я очень сомневаюсь, что необходимо сохранять эту информацию о «выходе». При необходимости можно рассчитать, завершена ли партия или нет. Если его можно рассчитать для действия ОБНОВЛЕНИЯ, его можно рассчитать в любое время. Если вы действительно хотите сохранить, я бы, вероятно, выполнил процедуру VBA, выполняющую инструкцию UPDATE.

2. Покажите все таблицы, связанные с этой проблемой, и для каждой из них перечислите соответствующие поля для этой проблемы: в противном случае мы не сможем понять вашу проблему. У вас есть таблица с перечнем тестов, которые должен пройти каждый продукт? У вас есть таблица с перечнем тестов, фактически пройденных каждой партией? Кроме того, объясните, что вы подразумеваете под «Выходом» из пакета: вы имеете в виду изменение значения поля «Выход» в записях «пакета», которые прошли все тесты, соответствующие этому product_id.

3. Обработка только тех записей, которые имеют TestComplete=NO, сделает ваш запрос более эффективным. Вы можете добиться этого, добавив предложение в раздел ГДЕ, вот так: ГДЕ (не завершено тестирование) и (номер пакета В ( ….))

4. Вы также можете повысить эффективность, добавив поле Выход в таблицу tbltestsperbatch. Таким образом, вы можете отфильтровать все записи, которые имеют SignOut = Да, используя простое условие WHERE.