4

我有一个看起来像这样的 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 参数。为什么我不能只使用 where id=ID,为什么当我这样做时它会返回所有记录?我使用限制 1 有什么影响?为什么我在星期六晚上编程?

4

2 回答 2

9

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

于 2008-12-20T22:48:36.143 回答
4

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

于 2008-12-20T23:16:20.347 回答