原先架構在 MS 的 Access 所以會有 mdb 檔案, 在 Access 裡頭可以看到一些既存的 Query 點 Design View 之後再去視窗上方按右鍵可以看到 SQL View
困境
把這樣的一串 SQL 丟到轉好的 phpMySQL 去執行是會發生問題的一堆 Syntax Error
原因
當初設計 Table 的人, 名稱設計不良用了空白在 table name, 導致 SQL 語法中要用到很多 [ ] 去把包含空白的 table 包起來。
解法
使用 ` (數字一左方, tab 上方那顆鍵, 不是單引號) 去替代原本的中括號 [ ]。還有在此例中把原先的 "No" 改成 "FALSE"
範例
MS Access 出來的 SQL
1 2 3 | SELECT [Chip Name Table].[Chip Name], [9600 Chip Data Table].[Package ID], [9600 Chip Data Table].[Skb IDNa #1], [9600 Chip Data Table].[Model ID], [Mfr Table].[Mfr Name], [Mfr Table].[Mfr ID], [9600 Chip Data Table].[Release Version], [SKB Table].[Skb IDNa], [Socket Name Table].[Socket Name ID] FROM [Socket Name Table] INNER JOIN ([SKB Table] INNER JOIN ([Mfr Table] INNER JOIN ([9600 Chip Data Table] INNER JOIN [Chip Name Table] ON [9600 Chip Data Table].[Chip list ID for 9600] = [Chip Name Table].[Chip List ID for 9600]) ON [Mfr Table].[Mfr ID] = [Chip Name Table].[Mfr ID]) ON [SKB Table].[Skb IDNa] = [9600 Chip Data Table].[Skb IDNa #1]) ON [Socket Name Table].[Socket Name ID] = [SKB Table].[Socket Name ID] WHERE ((([9600 Chip Data Table].[Release Version])<>"NV") AND (([Chip Name Table].[Chip List ID for 9600])>0 And ([Chip Name Table].[Chip List ID for 9600]) Is Not Null)); |
經過修正後的 SQL 就可以順利丟到 phpMySQL 去執行囉
1 2 3 | SELECT `Chip Name Table`.`Chip Name`, `9600 Chip Data Table`.`Package ID`, `9600 Chip Data Table`.`Skb IDNa #1`, `9600 Chip Data Table`.`Model ID`, `Mfr Table`.`Mfr Name`, `Mfr Table`.`Mfr ID`, `9600 Chip Data Table`.`Release Version`, `SKB Table`.`Skb IDNa`, `Socket Name Table`.`Socket Name ID`, `9600 Chip Data Table`.Testing FROM `Socket Name Table` INNER JOIN (`SKB Table` INNER JOIN (`Mfr Table` INNER JOIN (`9600 Chip Data Table` INNER JOIN `Chip Name Table` ON `9600 Chip Data Table`.`Chip list ID for 9600` = `Chip Name Table`.`Chip List ID for 9600`) ON `Mfr Table`.`Mfr ID` = `Chip Name Table`.`Mfr ID`) ON `SKB Table`.`Skb IDNa` = `9600 Chip Data Table`.`Skb IDNa #1`) ON `Socket Name Table`.`Socket Name ID` = `SKB Table`.`Socket Name ID` WHERE (((`9600 Chip Data Table`.`Release Version`)<>"NV") AND ((`9600 Chip Data Table`.Testing)=FALSE) AND ((`Chip Name Table`.`Chip List ID for 9600`)>0 And (`Chip Name Table`.`Chip List ID for 9600`) Is Not Null)); |
沒有留言:
張貼留言