【问题标题】:Inner join query returning empty set内连接查询返回空集
【发布时间】: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 时尝试将它们转换为整数以查看它们是否匹配。

标签: mysql join


【解决方案1】:

对于您的第二个问题,请尝试将其作为 JOIN 而不是使用 IN:-

UPDATE a 
INNER JOIN b
ON a.col = b.col
WHERE ........
SET  a.id=x 

【讨论】:

  • 这是问题的核心。第一个问题是我在解决第二个问题时遇到的问题。我尝试在那里使用连接,但连接返回空结果集。所以我需要弄清楚为什么?
  • 具有潜在大量数据的 IN 可能会很慢,而连接通常会更快。然而,对于第一个问题,我没有想到任何明显的东西,但鉴于一些示例数据(可能将其发布在 SQLfiddle 上),我们可能会发现一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2018-12-01
相关资源
最近更新 更多