【问题标题】:MySQL WHERE clause not working after CSV importCSV 导入后 MySQL WHERE 子句不起作用
【发布时间】:2013-01-08 14:21:37
【问题描述】:

我对 MySQL WHERE 子句有疑问。我想我知道问题出在哪里,只是不知道如何解决。

我有一个包含学生时间表信息的数据库,我正在将其与包含学生信息的表进行匹配。学生信息已从 CSV (utf-8) 文件导入数据库,其他信息刚刚通过“正常”INSERT 查询插入数据库。

WHERE 子句很简单,如下所示:

WHERE  gpu_timetable.cls_name = 
  (SELECT cls_name FROM gpu_students WHERE std_number = 123441 LIMIT 1)

它将时间表中的 cls_name(班级名称)与学生表中的班级名称相匹配。就像我说的数据来自不同的来源,但看起来是一样的。例如,当我删除 SELECT 查询并使用此字符串 ('LV6A') 时,代码有效。

两个字段的排序规则都是*utf8_general_ci*,我也尝试了TRIM(),但没有成功,同样将运算符=替换为LIKE

是我在导入学生信息的时候做错了什么,还是有其他类似TRIM()的函数可以解决这个奇怪的问题?

【问题讨论】:

  • 你为什么在这里使用子选择?为什么不加入?
  • 您确定在导入 CSV 之前正在工作吗?因为 MySQL 不允许在子查询中使用 LIMIT。
  • @MikeBrant 你是对的,我可以使用 JOIN 并且这可能是一种更快的方法。问题只是匹配不起作用,不是子选择也不是JOIN
  • @ajreal 谢谢,我不知道子选择查询中不允许LIMIT。我的查询在 CSV 导入之前有效,但我使用的是不同的查询。这个匹配仍然不起作用,或者这个简化的查询应该返回一些东西。 SELECT * FROM gpu_timetable INNER JOIN gpu_students ON gpu_timetable.cls_name = gpu_students.cls_name WHERE std_number = 123441

标签: mysql database csv


【解决方案1】:

您的简化查询必须是:

SELECT * FROM gpu_timetable INNER JOIN gpu_students ON gpu_timetable.cls_name = gpu_students.cls_name WHERE gpu_students.std_number = 123441

在使用 JOIN 查询时,您应该始终拥有 tablename.fieldname

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2014-01-26
    • 2019-06-15
    相关资源
    最近更新 更多