更新:此query
用于忘记密码。 emailAdd 和 accountNumber 用作用户名,用户可以输入accountNumber
或emailAdd
。
我很困惑为什么我的select
query
会返回row
甚至不等于where
clause
的{{1}}。
样本表
accountNumber | email
0 | a@g.c
100 | b@g.c
查询
SELECT accountNumber , email FROM tblsample WHERE accountNumber ='c@g.c' OR email='c@g.c'
意外输出
accountNumber | email
0 | a@g.c
预期输出
accountNumber | email
它不应该返回任何row
,因为您可以在where
clause
中看到 c@g.c不等于0
其他信息
column accountNumber
是int
column email
是varchar
答案 0 :(得分:2)
查询中没有任何问题,您将accountNumber的数据类型设置为int,将电子邮件设置为varchar。当您为int列传递字符串时,它不能将字符串转换为int,因为在初始点的字符串中没有任何整数值,因此它将返回0.该0值与数据库中的第一个记录匹配所以它返回了第一行。您应该将整数列的大小写输入到字符以与字符串值进行比较。
例如:
SELECT accountNumber , email FROM tblsample WHERE cast(accountNumber as char(11)) ="c@g.c" OR email="c@g.c";
这不会返回任何行,因为它与条件不匹配。如果您有任何混淆,请告诉我。