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的早期版本已损坏。谢谢!!!这两个版本都很有魅力,我以前从未见过“交叉连接”,所以我必须研究它,但这个查询第一次解决了我的问题。非常感谢!