Вывод с подзапросом на основе условий в MySQL

Ниже мой запрос:

выберите c1, c2, c3, c4, c5 из таблицы1, где c1 = 0// Условие 1
AND c2 = "abc"// Условие 2
AND c3 = "xxx"// Условие 3
И с4 = 5// Условие 4

Здесь, поскольку мы знаем, что условие 2 будет применено к данным результата, заданным условием 1, условие 3 будет применено к данным результата, заданным условием 2 и 1, и аналогично будет применено условие 4...

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

Означает, что если условие 3 не даст результата (или набора результатов с нулевым значением), то мое условие 4 будет применено к нулевому набору результатов, так что вызывающий окончательный вывод будет нулевым, но я хочу, чтобы условие 3 не дало результата (или набора с нулевым результатом), тогда условие 4 "Должно быть применено" к возврату набора результатов по условиям 2 и 1.

Здесь я не могу изменить последовательность условий из-за проблем с производительностью.

Пожалуйста, направьте меня с вопросом.

3 ответа

Решение

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

Я использовал простой союзный запрос.

выберите c1, c2, c3, c4, c5 из таблицы1, где c1 = 0// Условие 1
AND c2 = "abc"// Условие 2
AND c3 = "xxx"// Условие 3
И с4 = 5// Условие 4
UNION
выберите c1, c2, c3, c4, c5 из таблицы1, где c1 = 0 // Условие 1
AND c2 = "abc"// Условие 2
И с4 = 5// Условие 4

Если у кого-то есть более точное и правильное решение. Пожалуйста, отправьте это.

Попробуй это

select c1, c2, c3, c4, c5 from table1 where (c1 =0) or (c2="abc") or (c3="xxx") or (c4 = 5)

Насколько я вижу, вы хотите, чтобы условие 3 было необязательным. Это может быть сделано, но вряд ли будет эффективным решением:

Select c1, c2, c3, c4, c5
From table1
Where c1 = 0
  AND c2 = "abc"
  AND (c3 = "xxx"
       OR NOT Exists (Select '*' From table1 Where c1 = 0 AND c2 = "abc" AND c3 = "xxx")
      )
  AND c4 = 5

Лучшим подходом может быть использование временной таблицы, отфильтрованной по условиям 1 и 2 с дальнейшей логикой, примененной к этому подмножеству данных.

Другие вопросы по тегам