2008-12-20 51 views
3

我有一个MySQL的存储过程,看起来像this--MySQL存储过程的where子句问题

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的含义是什么?为什么我在星期六晚上进行编程?

回答

7

因为它比较t.id和它本身,它总会是真的。另外调用你的形式参数。

2

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