#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. Не должно быть никакого результата или операция выбора должна быть отброшена, если есть запись «ПОЛНАЯ»