1
這有點令人困惑,所以請耐心等待。MySQL 5.5中混合連接查詢問題雖然在MySQL 4.1.25中工作
我有3個表:
p ps s
+----+ +----+----+ +----+
|id | |pid |sid | |id |
+----+ +----+----+ +----+
|1 | |2 |1 | |1 |
|2 | |2 |2 | |2 |
|3 | |3 |1 | |3 |
+----+ +----+----+ +----+
TBL PS是用來從對記錄鏈接爲s - p可以與多於一個的「記錄,因此鏈接表進行組合。
在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個記錄),我需要儘可能在一些步驟中獲得相同的結果集。
感謝您的時間夥伴!
謝謝!!!在兩個版本上都有魅力,我從來沒有見過「交叉連接」,所以我不得不查看它,但這個查詢第一次解決了我的問題。 Mucho讚賞! – ConBran