我有以下问题,一个简单的表
PERSON :
FNAME LNAME AGE
-----------------
John Carl 22
Rupert Luis 24
如果我执行以下T-SQL查询:
Select *
from PERSON
WHERE FNAME = 'John' AND LNAME = 'Carl'
它没有显示任何结果......如果我放置OR而不是AND它对我来说没有任何意义,但它可能是正确的,我只是想明白为什么会这样?
答案 0 :(得分:5)
您显示数据的方式,在姓氏的开头有一个空格。我不知道原始数据中是否属实,但在查询中确实如此。
然后字符串'CARL'
和' CARL'
不一样。您可以进行比较:
where ltrim(rtrim(firstname)) = 'John' and ltrim(rtrim(lastname)) = 'Carl'
或者您可以修复数据:
update person
set lastname = ltrim(rtrim(lastname));
或者,可能存在另一个类似问题,通常由以下原因引起:
答案 1 :(得分:1)
你没有对AND OR做错事 当数据出现时,AND应该返回数据
您最有可能的是看似相同但不是
的数据这样做可以找出哪个缺失
Select *
from PERSON
WHERE FNAME = 'John'
Select *
from PERSON
WHERE LNAME = 'Carl'
在没有返回任何内容的情况下尝试
Select *
from PERSON
WHERE LNAME like '%Carl%'