Запрос выполняется, но данные не отображаются — MySQL

#mysql #sql #mysql-workbench

#mysql #sql #mysql-workbench

Вопрос:

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

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

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

 select synopsis
from policy p
     left outer join institution_has_policy ihp
          on p.policy_id = ihp.policy_id
     left outer join institution i 
          on i.institution_id = ihp.institution_id   
where p.policy_type_id = 5  
      and i.institution_name = 'SSgA Funds Management, Inc.'
      and current_as_of_date = (select max(current_as_of_date) from policy p);
  

Правильно ли мое утверждение sql?

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

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

2. Запрос выглядит нормально. Удалите его и запускайте по частям за раз, начиная только с политики.

3. Я сделал, как вы предложили, он будет запускаться и отображать данные до тех пор, пока я не вставлю последнее предложение where (currentet_as_of_date), тогда данные не отображаются

Ответ №1:

Это ваш запрос:

 select synopsis
from policy p left outer join
     institution_has_policy ihp
     on p.policy_id = ihp.policy_id left outer join
     institution i 
     on i.institution_id = ihp.institution_id   
where p.policy_type_id = 5 and
      i.institution_name = 'SSgA Funds Management, Inc.'
      current_as_of_date = (select max(current_as_of_date) from policy p);
  

Данные не возвращаются, поскольку максимальное значение на дату не соответствует политике и названию учреждения. Если вы хотите, чтобы возвращалась только одна строка, вы можете использовать order by и limit для получения последней:

 select synopsis
from policy p left outer join
     institution_has_policy ihp
     on p.policy_id = ihp.policy_id left outer join
     institution i 
     on i.institution_id = ihp.institution_id   
where p.policy_type_id = 5 and
      i.institution_name = 'SSgA Funds Management, Inc.'
order by current_as_of_date desc
limit 1;
  

Ответ №2:

Это неверно, поскольку весьма возможно, что выбранная вами политика не будет фактически самой последней политикой (из всех, а не из всех отфильтрованных). Вы можете попробовать удалить ограничение даты, упорядочить его по дате и выбрать только первую строку (ОГРАНИЧЕНИЕ 1).

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

1. О, значит, моя политика фильтруется неправильно. Итак, прямо сейчас мой оператор sql ищет тип политики 5, но в то же время ищет ЛЮБОЙ тип политики с самой текущей датой. именно поэтому не отображаются какие-либо данные. Это правильно?

2. Да, точно. Вам нужно будет повторить весь запрос в (ВЫБЕРИТЕ MAX (date) ….), чтобы он работал таким образом. Однако использование упорядочения и ОГРАНИЧЕНИЯ 1 — лучший способ сделать это.