【发布时间】: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