2012-06-15 52 views
1

我正在使用Chinook測試數據庫來比較Sqlite3和MySQL5查詢結果。爲什麼SQLite和MySQL不能在子查詢中給出相同的結果?

誰能告訴我爲什麼以下查詢在這兩個數據庫中給出了不同的結果,爲什麼MySQL創建了一個新的InvoiceId?

SELECT * FROM invoice WHERE InvoiceDate > (SELECT AVG(InvoiceDate) FROM invoice) LIMIT 3 

enter image description here


附錄:

enter image description here

+1

如果刪除'LIMIT'子句,結果集是否與另一個訂單相同?它很可能是,並且實現有不同的選擇行的方式。 –

+0

我想你需要一個ORDER BY如果你想要相同的三個 – Jesse

+0

@evan是每個數據庫有不同的命令,有趣。最有趣的是,MySQL如上所示錯誤地列出了invoice id(theordor ...的invoiceid是1,而不是195,sqlite正確),爲什麼? –

回答

2

結果的順序是不確定的;因此這些「前三個」也沒有說明。

僅僅是因爲當你沒有使用子選擇符時,你在兩個引擎上得到了相同的順序,並不意味着它們總是一樣。

0

嘗試這種情況:

SELECT * FROM發票WHERE InvoiceDate>(SELECT AVG(InvoiceDate)FROM發票)ORDER BY InvoiceId ASC LIMIT 3

MySQL是不創建新的發票ID ,它只是不對結果集進行排序。

+0

我試過了(見上面),MySQL仍然列出了InvoiceId不正確,奇怪的記錄。 –

+0

什麼'SELECT AVG(InvoiceDate)FROM invoice'返回?這在兩個數據庫上都是不同的還是相同的? – gcochard

相關問題