我有一个简单的位置表,其中包含以下列: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','');
一切正常,我学会了使用文本文件填充数据库的技巧。
感谢大家帮我解决这个奇怪的问题。
答案 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)
尝试使用单引号而不是双引号。 '新奥尔良'