2008-12-20 31 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子句實際上是使用兩個不同的表達式來引用同一列。當然,列的值總是與自身相等,因此所有記錄都匹配。爲輸入參數使用不同的名稱。