当数据存在时,Mysql返回空集

时间:2011-11-18 21:19:47

标签: mysql

我有一个简单的位置表,其中包含以下列:location_id, country, state, city

我用数据填充表并运行以下查询:

SELECT location_id 
FROM locations 
WHERE country="United States" 
AND state="Louisiana" 
AND city="New Orleans";

即使数据存在,MySQL也会返回一个空集。我把它隔离到了城市专栏。如果我在WHERE子句中省略了城市条件,一切都很好。如果我在SELECT子句中请求城市而不在WHERE子句中请求一切都很好。可能是什么问题呢?这个查询似乎太简单了,不会造成麻烦。

城市列中的空格是否可能导致此问题?

UPDATE! UPDATE!

感谢每个人 - 我解决了问题。 我从文本文件中输入了城市列数据,每个城市名称都在一行上。这让我想知道换行符。我运行了查询(SELECT location_id FROM locations WHERE state =“Louisiana”AND city =“New Orleans \ n”)。工作就像一个魅力。

我通过运行此查询清除了列中的所有换行符: 更新locations设置city =替换(替换(city,'\ r',''),'\ n','');

一切正常,我学会了使用文本文件填充数据库的技巧。

感谢大家帮我解决这个奇怪的问题。

5 个答案:

答案 0 :(得分:2)

可能不是白色空间;美国也是两个字。我会浏览表格以查找拼写错误或其他拼写错误。

您可以确保前导或尾随空格没有问题,或者像这样大小写:

SELECT location_id
FROM locations
WHERE lcase(trim(country))="united states"
AND lcase(trim(state))="louisiana"
AND lcase(trim((city))="new orleans"

答案 1 :(得分:1)

城市是否完全等同于“新奥尔良”?还是有空间?或资本化问题?尝试

trim(city) like 'new orleans'

答案 2 :(得分:0)

我想city列可能在列的数据中有一些额外的空间,你的排序规则会以某种方式影响这一点。尝试做:

SELECT location_id 
FROM locations 
WHERE country="United States" 
AND state="Louisiana" 
AND trim(city)="New Orleans";

答案 3 :(得分:0)

尝试:

SELECT location_id 
FROM locations 
WHERE country="United States" 
AND state="Louisiana" 
AND city LIKE "New Orleans%";

答案 4 :(得分:0)

尝试使用单引号而不是双引号。 '新奥尔良'