MySQL 5.5中的混合联接查询问题,尽管在MySQL 4.1.25中工作

MySQL 5.5中的混合联接查询问题,尽管在MySQL 4.1.25中工作,mysql,sql,join,left-join,right-join,Mysql,Sql,Join,Left Join,Right Join,这有点让人困惑,所以请容忍我 我有三张桌子: p ps s +----+ +----+----+ +----+ |id | |pid |sid | |id | +----+ +----+----+ +----+ |1 | |2 |1 | |1 | |2 | |2 |2 | |2 | |3 | |3 |1 | |3 | +

这有点让人困惑,所以请容忍我

我有三张桌子:

p           ps            s
+----+      +----+----+   +----+
|id  |      |pid |sid |   |id  |
+----+      +----+----+   +----+
|1   |      |2   |1   |   |1   |
|2   |      |2   |2   |   |2   |
|3   |      |3   |1   |   |3   |
+----+      +----+----+   +----+
tbl ps用于将记录从p链接到s-p可以与多个“s”记录组合,因此是链接表

在MySQL 4.1.25中,我使用以下查询来检索所有数据,包括其中的“p”没有相应的“s”记录,即使“p”根本没有链接:

select p.id, ps.pid, ps.sid, s.id from p left join ps on p.id=ps.pid s right join on ps.sid=s.id;
这工作正常,返回正确:

+------+------+------+------+
|p.id  |ps.pid|ps.sid|s.id  |
+------+------+------+------+
|1     |null  |null  |1     |
|1     |null  |null  |2     |
|1     |null  |null  |3     |
|2     |1     |1     |1     |
|2     |2     |2     |2     |
|2     |null  |null  |3     |
|3     |3     |1     |1     |
|3     |null  |null  |2     |
|3     |null  |null  |3     |
+------+------+------+------+    
然而,现在MySQL 5.5中的同一查询产生了以下结果:

+------+------+------+------+
|p.id  |ps.pid|ps.sid|s.id  |
+------+------+------+------+
|null  |null  |null  |1     |
|null  |null  |null  |2     |
|null  |null  |null  |3     |
|2     |1     |1     |1     |
|2     |2     |2     |2     |
|null  |null  |null  |3     |
|3     |3     |1     |1     |
|null  |null  |null  |2     |
|null  |null  |null  |3     |
+------+------+------+------+    
如您所见,ps中未出现的任何“p”记录都将作为空值返回。看起来它似乎更倾向于正确的连接

关于这里发生了什么变化以及我如何纠正它,有什么想法吗

不幸的是,正确的查询必须在两个版本的MySQL中都能工作——老实说,这对我来说越来越痛苦,但我对此无能为力。 显然,效率是关键,因为这些表包含100条记录(ps包含1000条),我需要在尽可能小的步骤中获得相同的结果集


谢谢你们的时间,伙计们

我认为你想做的最好的表达方式是这个查询:

select p.id, ps.pid, ps.sid, s.id
from p cross join
     s left join
     ps
     on p.id=ps.pid s and ps.sid=s.id;

我怀疑MySQL的早期版本已损坏。

谢谢!!!这两个版本都很有魅力,我以前从未见过“交叉连接”,所以我必须研究它,但这个查询第一次解决了我的问题。非常感谢!