2012-05-28 26 views
0

我有一個看起來像一個SQL語句:如何正確使用ORDER BY與內部聯接

SELECT * FROM table1 AS bl 
INNER JOIN table2 AS vbsa ON bl.id=vbsa.businesslisting_id AND vbsa.section_id ='70' 
INNER JOIN table3 AS vbla ON bl.id=vbla.businesslisting_id AND vbla.location_id='1' 
WHERE bl.published = '1' 
ORDER BY bl.listing_type DESC 

出於某種原因,這將不返回任何行,但是如果我刪除了ORDER BY子句它的回報行。任何想法,爲什麼會這樣?

column listing_type確實存在於數據庫中,幷包含數值。它被設置爲varchar類型。我想也許這是問題,但我嘗試了不同的列(ID),但它仍然無法工作。

感謝 羅伯特

+1

'ORDER BY'不應該過濾結果,所以除非在mysql中有一個錯誤(非常不可能),不管ORDER BY是多少,行的數量必須相同。我建議如果您使用任何GUI工具來運行查詢,請確保它不會過濾任何內容。 – a1ex07

+0

不試圖過濾結果只是對它們進行排序。我同意,但如果我刪除該條款,它確實有效。我也試過table1.listing_type,沒有什麼區別。 – Robert

+0

這是對我的問題的迴應!? – Robert

回答

0

發現問題。我一直在處理其他人的代碼,並且他們沒有將索引添加到有問題的表中。

因此,當我添加按屬性排序並運行查詢時,它超過了MAX_JOIN_SIZE行。

我添加了索引,現在它工作得很完美。

感謝您的每一個輸入。

0

試試這個

SELECT * FROM table1 AS bl 
INNER JOIN table2 AS vbsa ON bl.id = vbsa.businesslisting_id 
INNER JOIN table3 AS vbla ON bl.id = vbla.businesslisting_id 
WHERE bl.published = 1 AND vbsa.section_id = 70 AND vbla.location_id = 1 
ORDER BY bl.listing_type DESC 

還要確保調試SQL時,嘗試沒有看到這些錯誤修正,以查看錯誤信息是很難

+0

感謝您的回覆。嘗試了你的建議,但得到了錯誤:104 - SELECT將檢查超過MAX_JOIN_SIZE行;檢查你的WHERE並使用SET SQL_BIG_SELECTS = 1或SET SQL_MAX_JOIN_SIZE =#如果SELECT可以 – Robert