хранимая процедура mySQL, где проблема условия - PullRequest
3 голосов
/ 21 декабря 2008

У меня есть хранимая процедура mySql, которая выглядит так -

delimiter |
create procedure GetEmployeeById(in ID varchar(45))
begin
  select id,
      firstName,
      lastName,
      phone,
      address1,
      address2,
      city,
      state,
      zip,
      username,
      password,
      emptypeid
  from myschema.tblemployees t
  where
      t.id=ID limit 1;
end |
delimiter;

Если у меня нет предела 1, он всегда возвращает все строки в таблице - со значением id каждой записи, установленным в параметре ID. Почему я не могу просто использовать, где id = ID, и почему он возвращает все записи, когда я делаю? Каковы мои последствия использования лимита 1? Почему я программирую в субботу вечером?

Ответы [ 2 ]

7 голосов
/ 21 декабря 2008

Потому что он сравнивает t.id с самим собой, что всегда будет правдой. Назовите ваш формальный параметр как-нибудь еще.

2 голосов
/ 21 декабря 2008

Имена столбцов в MySQL не чувствительны к регистру. Столбец id в вашем запросе скрывает параметр с именем ID, поэтому ваше предложение where действительно использует два разных выражения для ссылки на один и тот же столбец. И, конечно, значение столбца всегда равно самому себе, поэтому все записи совпадают. Используйте другое имя для входного параметра.

...