【发布时间】:2014-05-15 11:30:26
【问题描述】:
我有两个表,其中 varchar 列具有共同的值。
我正在尝试对这些 varchar 列上的表执行简单的内部联接,但结果是我得到了空集。
这些列中存在空值。
两列的排序规则相同。
我搜索了它,但找不到解决方案。
该查询是一个简单的连接查询,没有任何语法问题。
当我将内部连接更改为左连接时,我得到一个结果集,但即使行通过了连接条件,右表中的所有列都是空的。
我创建了两个带有通用 varchar 的虚拟表来运行连接查询,它可以工作。
所以这不是一个错误。那么猜测得到空集的可能原因是什么。
服务器是mysql版本5.5.37
update a set a.id=x where a.col in(Select col from b where .....);
另一个问题是我有一个类似上面的查询,但是当我运行它时它有点挂起......正在运行 显示处理程序; 状态正在发送数据... 这是什么意思? 谁能帮帮我。
编辑 1 查询是这样的
UPDATE table1 bo INNER JOIN table2 ae
ON bo.joincol=ae.joincol AND ae.criteriaFieldName='UNSPSC' AND ae.taskId=4 AND ae.batchId = 44
SET bo.taskid=ae.taskId WHERE bo.procesId = 44 AND (taskid IS NULL OR taskid = 0);
Table1 包含 50 多列
表 2 包含 8 列
不幸的是,我不能透露数据。
有趣的事实是,如果我使用 taskId 加入他们,我会得到一个结果集。
【问题讨论】:
-
您能否发布不起作用的联接以及一些示例数据?
-
从语法上看,该更新查询似乎没有任何问题(尽管使用 INNER JOIN 您也可以将 3 个固定值检查放在 WHERE 子句而不是 ON 子句中)。不幸的是,这意味着问题可能出在数据上。 joincol 在一张桌子上有前导空格吗?如果它们是数字,则在执行 JOIN 时尝试将它们转换为整数以查看它们是否匹配。