我正在使用Chinook測試數據庫來比較Sqlite3和MySQL5查詢結果。爲什麼SQLite和MySQL不能在子查詢中給出相同的結果?
誰能告訴我爲什麼以下查詢在這兩個數據庫中給出了不同的結果,爲什麼MySQL創建了一個新的InvoiceId?
SELECT * FROM invoice WHERE InvoiceDate > (SELECT AVG(InvoiceDate) FROM invoice) LIMIT 3
我正在使用Chinook測試數據庫來比較Sqlite3和MySQL5查詢結果。爲什麼SQLite和MySQL不能在子查詢中給出相同的結果?
誰能告訴我爲什麼以下查詢在這兩個數據庫中給出了不同的結果,爲什麼MySQL創建了一個新的InvoiceId?
SELECT * FROM invoice WHERE InvoiceDate > (SELECT AVG(InvoiceDate) FROM invoice) LIMIT 3
結果的順序是不確定的;因此這些「前三個」也沒有說明。
僅僅是因爲當你沒有使用子選擇符時,你在兩個引擎上得到了相同的順序,並不意味着它們總是一樣。
嘗試這種情況:
SELECT * FROM發票WHERE InvoiceDate>(SELECT AVG(InvoiceDate)FROM發票)ORDER BY InvoiceId ASC LIMIT 3
MySQL是不創建新的發票ID ,它只是不對結果集進行排序。
我試過了(見上面),MySQL仍然列出了InvoiceId不正確,奇怪的記錄。 –
什麼'SELECT AVG(InvoiceDate)FROM invoice'返回?這在兩個數據庫上都是不同的還是相同的? – gcochard
如果刪除'LIMIT'子句,結果集是否與另一個訂單相同?它很可能是,並且實現有不同的選擇行的方式。 –
我想你需要一個ORDER BY如果你想要相同的三個 – Jesse
@evan是每個數據庫有不同的命令,有趣。最有趣的是,MySQL如上所示錯誤地列出了invoice id(theordor ...的invoiceid是1,而不是195,sqlite正確),爲什麼? –