我需要一些 MySQL 方面的帮助。假设我有这个查询 Q1:
Q1:
select cn.idConteudo, TIMESTAMPDIFF(SECOND, nl.dataInicio , nl.dataFim)
from navegacaolog nl, conteudoNo cn
where nl.idConteudoNo = cn.idConteudoNo AND
TIMESTAMPDIFF(SECOND, nl.dataInicio , nl.dataFim) > 120
结果如下:
但是,如果我将另一个表添加到“from”,假设:utilizador 表 (Q2),结果会非常不同,如下图所示:
Q2:
select cn.idConteudo, TIMESTAMPDIFF(SECOND, nl.dataInicio , nl.dataFim)
from navegacaolog nl, conteudoNo cn, utilizador
where nl.idConteudoNo = cn.idConteudoNo AND
TIMESTAMPDIFF(SECOND, nl.dataInicio , nl.dataFim) > 120
我不明白为什么添加另一个表(不在 where 子句中使用它)这一事实如此重要。有人可以给我一些帮助吗?
亲切的问候
最佳答案
您没有指定连接条件,所以您得到的是 FULL CROSS JOIN,它为基表中的每一种可能的行组合生成一行。
http://en.wikipedia.org/wiki/Join_(SQL)
我发现使用 ANSI 语法连接可以避免这种混淆。不要只在 FROM 子句中使用逗号...使用实际的 JOIN 子句...
select cn.idConteudo, TIMESTAMPDIFF(SECOND, nl.dataInicio , nl.dataFim)
from navegacaolog nl
JOIN conteudoNo cn ON nl.idConteudoNo = cn.idConteudoNo
where TIMESTAMPDIFF(SECOND, nl.dataInicio , nl.dataFim) > 120
关于mysql - SQL 查询 : why does adding another table change the results?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19033451/