mySQL存储过程where子句问题

时间:2008-12-20 22:37:20

标签: mysql stored-procedures return-value where-clause

我有一个看起来像这样的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 个答案:

答案 0 :(得分:7)

因为,它正在将t.id与自身进行比较,这总是正确的。将您的形式参数称为其他内容。

答案 1 :(得分:2)

MySQL中的列名称不区分大小写。查询中的id列隐藏名为ID的参数,因此您的where子句实际上使用两个不同的表达式来引用同一列。当然,列的值总是等于它自己,因此所有记录都匹配。为输入参数使用不同的名称。