Как проверить наличие значения в столбце и отбросить / продолжить чтение (select) в таблице, используя sql?

#mysql #sql

#mysql #sql

Вопрос:

У меня есть таблица: LoadResults со столбцами: load, incLoad amp; incKeys

случай 1:

 load    incLoad     incKeys
Full    Full          11
Delta   Delta         12
Delta   Delta         13
Delta   Delta         17
Full    Full          19
Full    Full          15
Delta   Delta         16
  

Столбец incKeys , содержащий ключи (инкрементные данные), должен быть перемещен. Мы поддерживаем таблицу метаданных: MetaLoad где мы храним последние перемещенные incKey данные из предыдущих загрузок каждой таблицы, чтобы мы могли использовать этот ключ (из таблицы: MetaLoad ) и получать новые добавочные ключи из LoadResults таблицы с помощью приведенного ниже запроса:

 select incKeys from schema.LoadResults where incKeys > metaLoadKey
  

— Я могу получить значение metaLoadKey с помощью кода.

Прежде чем запрашивать таблицу: LoadResults для инкрементных ключей, мне нужно проверить, является ли тип загрузки в любом из столбцов: load, incLoad FULL . Если оно ЗАПОЛНЕНО в любом из столбцов, тогда я должен удалить прочитанное в таблице. Если нет, мне нужно прочитать все значения столбца: incKeys (выберите incKeys) случай 2:

 load    incLoad     incKeys
Delta   Delta         11
Delta   Delta         12
Delta   Delta         13
Delta   Delta         17
Delta   Delta         19
  

Если в нем есть только «Дельта», мой вывод должен содержать все incKeys .

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

Ответ №1:

Вы можете просто сделать это, используя вложенные инструкции SQL. Этот код покажет ваши записи только тогда, когда все incLoad и load равны ‘Delta’, в противном случае не будет показано ни одного результата.

     select incKeys from schema.LoadResults where incKeys > metaLoadKey AND (SELECT COUNT(*) FROM schema.LoadResults where not incLoad='Delta' or not load='Delta')=0;
  

Вложенный оператор действует как условие и гарантирует, что КОЛИЧЕСТВО записей, не имеющих дельты в качестве incLoad или load, равно нулю.

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

1. Нет. Я должен отбросить все чтение, если в столбцах есть запись «FULL»: Load amp; IncLoad

2. Отредактировал мой ответ. Теперь ваш вопрос более ясен. Это соответствует предположению, что ‘no read’ означает, что результат не возвращается.

3. Excatly. Не должно быть никакого результата или операция выбора должна быть отброшена, если есть запись «ПОЛНАЯ»