【问题标题】:Last column of table distorts query result表的最后一列扭曲了查询结果
【发布时间】:2017-04-19 21:34:12
【问题描述】:

我正在创建以下表格。

CREATE TABLE Person (
Case_Number VARCHAR(50) Primary Key,
Sex VARCHAR(10)
);

CREATE TABLE ourCases (
Case_Number VARCHAR(50) Primary Key,
Rage VARCHAR(30),
Activity VARCHAR(30),
Fatal VARCHAR(10)
);

CREATE TABLE Area_Time (
Case_Number VARCHAR(50) Primary Key,
ourYear int,
ourTime VARCHAR(20),
Area VARCHAR(50)
);

我的所有查询都有效,除了当我包含每个表的最后一列时,即“区域”、“致命”和“性别”,只要我包含那些我的计数等于 0,即使它不应该,因为我可以在 .csv 表中看到它。

我使用的查询

SELECT
COUNT(*)
FROM
area_time,
ourcases,
person
WHERE
area_time.Case_Number = ourcases.Case_Number
AND
area_time.Case_Number = person.Case_Number
AND
person.Case_Number = ourcases.Case_Number
AND
ourYear = 2016
AND
ourTime = "Afternoon"
AND
Area = "Florida";

当我删除 "Area = "Florida"" 部分时,它会相应地工作。 我在我的 Java 应用程序和 mySQL 工作台中尝试了这些查询,但都不起作用。我根本看不出数据有什么问题。 .csv 导入也没有问题。我错过了什么?

【问题讨论】:

  • 您是否尝试使用这三个字段添加和标识符,如下所示。 area_time.ourYear = 2016 AND area_time.ourTime = 'Afternoon'AND area_time.Area = 'Florida'如果不行可以尝试dump这三个表的数据在这里评论一下。
  • 之前尝试过标识符,显然没有帮助。 Here is the data I use

标签: java mysql csv


【解决方案1】:

PTI 我试过了,但无法重现您的错误,您还有其他示例吗?

这是我的查询:

SELECT 
    area_time.Area,
    ourcases.Fatal,
    person.Sex
FROM
    area_time,
    ourcases,
    person
WHERE
    area_time.Case_Number = ourcases.Case_Number
        AND area_time.Case_Number = person.Case_Number
        AND person.Case_Number = ourcases.Case_Number
        AND ourYear = 2016
        AND ourTime = 'Afternoon'
        AND Area = 'Florida';

结果:

如果我能重现该问题,很高兴再试一次。

问候,

詹姆斯

【讨论】:

  • 首先感谢您抽出宝贵时间试用。复制了您的确切查询,但结果我一无所获。 Here's a picutre.
  • 不用担心,我在这里有点抓狂,但是字符编码会改变字符吗?如果您只是执行SELECT * 并手动查找值,“佛罗里达”条目会是什么样子?在 Excel 或类似软件中使用EXACT()进行比较时,它们实际上是否与您认为的相同?
  • 啊,现在我还没有使用 EXACT() 函数,但是当我复制条目时,结果不是'Florida',正如我所期望的那样,但它是'Florida\ r'。它对“Sex”、“Fatal”和“Area”('Florida\r'、'No\r'、'Male\r')的所有条目执行相同的操作。如果我调整查询以搜索“Florida\r”,它就会相应地工作。所以特维姆!但这是为什么呢?
  • 它们是 ASCII 控制字符(用于使早期打印机正常工作等),您需要 MySQL 中的 TRIM 函数,对所有列进行更新,将该函数应用于任何有问题的字段,一切都应该工作美好的。我现在在我的手机上,如果你需要一个完整的工作示例,请告诉我,我会把它放在答案中。谢谢!
  • Charles,已经反映,如果您在工作台中查看结果时实际上可以在 MySQL 中看到字符串上的“\r”,那么您所拥有的是 Linux 行的可见(转义)版本结束字符,由于原始数据的某些问题或导入 MySQL 的某些字段以反斜杠和 r 结尾,因此非常有效。在导入纯文本数据之前检查它,如果可以看到字符,则问题的原因存在于 MySQL 之外,理想情况下需要从源头解决。解决方法是使用 IF 检查 \r 并使用 LEFT 删除它的 UPDATE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多