2013-07-06 2 views
6

Я хочу выполнить другой SELECT, основанный на данных столбца. Например, у меня есть таблица http://sqlfiddle.com/#!2/093a2, где я хочу сравнить start_date и end_date, только если use_schedule = 1. В противном случае выберите все данные. (Другой выбор) В основном я хочу сравнить только дату начала и окончания, если только use_schedule равен 1, а если use_schedule равен 0, тогда выберите остальную часть данных.Как выбрать на основе разных данных столбца

Примером может быть что-то вроде

select id, name from table 
where use_schedule = 0 
else 
select id, name, start_date from table 
where use_schedule = 0 and current_date >= start_date. 

В принципе у меня есть данные, где график включены только затем искать в дате начала и окончания. Потому что, если расписание не включено, нет смысла изучать даты. Просто выберите данные. С включенным расписанием я хочу быть более избирательным при выборе запланированных данных.

Я пытаюсь выяснить, работают ли операторы MySQL CASE или IF, но не могут этого сделать. Как запустить этот выбор?

Спасибо.

+0

Что вы хотите сравнить с start_date и end_date? ЕСЛИ начало, если после окончания? Начало раньше? пожалуйста, укажите больше данных. –

+0

В основном у меня есть данные, где расписание включено, а затем заглядывать в начало и конец даты. Потому что, если расписание не включено, нет смысла изучать даты. Просто выберите данные. С включенным расписанием я хочу быть более избирательным при выборе запланированных данных. – NBhatti

+0

ОК, теперь я задаю вопрос лучше, добавьте это в вопрос, чтобы его лучше объяснить. Я вижу, что вы помещаете «mysql» только как тег, вы также используете серверный язык? –

ответ

1

Вы можете использовать UNION смешивать и сопоставлять результаты 2-х различных запросов SQL в один результирующий набор:.

select id, name, null from table 
where use_schedule = 0 
union 
select id, name, start_date from table 
where use_schedule = 1 and current_date >= start_date 

Обратите внимание, что оба запроса должны иметь совместимые поля вывода (одинаковое число и тип для этого). Использование UNION автоматически объединяет только отдельные записи - если вы хотите сохранить двойные результаты, используйте вместо этого UNION ALL.

В данном конкретном случае более обширный WHERE -clause также будет работать, очевидно:

where use_schedule = 0 or (use_schedule = 1 and current_date >= start_date) 

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

Documentation over at MySQL site.

+0

Союз на самом деле два SELECT, которого я пытаюсь избежать. Если 2 SELECTS - это вариант, я мог бы сделать это на своем языке программирования. Ваше решение работает отлично, но давайте посмотрим, можем ли мы понять что-то более эффективное? – NBhatti

+0

Объединение из 2 выбирает гораздо эффективнее, чем 2 отдельных выбора внутри. –

1

случай использования, в данном случае ..:

SELECT id, name, 
    (CASE 
     WHEN start_date >= DATE(NOW()) AND use_schedule = 1 
     THEN start_date 
    ELSE NULL 
    END) AS cols FROM campaigns 

Таким образом, он выбирает только график 0 или 1 с датой больше или равен в настоящее время; я DATE (NOW()), так что она удаляет время, которое вы не заинтересованы в

Смежные вопросы