2014-01-25 58 views
0

我已經在sqlite中使用sqlite管理器創建了一個視圖。沒有這樣的列:R1.ReadingDate錯誤

Create View vMeterReading 
as 
SELECT M._id as Meter_id, M.MeterNumber, R1.ReadingDate, R1.Reading AS    CurrentReading, R2.ReadingDate AS PrevReadingDate, R2.Reading AS PrevMeterReading, R2.Rate as Rate, R2._id,R1.TenantMeter_id 
FROM (Meters AS M INNER JOIN TenantMeters ON M._id = TenantMeters.Meter_id) INNER JOIN (MeterReading AS R1 INNER JOIN MeterReading AS R2 ON R1.TenantMeter_id = R2.TenantMeter_id) ON TenantMeters._id = R1.TenantMeter_id 
WHERE (((R2.ReadingDate)=(SELECT Max(R3.ReadingDate) 
     FROM [MeterReading] AS R3 
     WHERE (R3.TenantMeter_id = R1.TenantMeter_id) 
     AND (R3.ReadingDate < R1.ReadingDate)  
    ))) OR (((R2.TenantMeter_id) Is Null)) 
ORDER BY M.MeterNumber, R1.ReadingDate. 

我曾嘗試使用android系統中此視圖(select * from vMeterReading),我得到了錯誤的標題。

我也連接到命令提示符的sqlite數據庫,並試圖執行相同的查詢。我犯了同樣的錯誤。

sql語句有什麼問題?

它在sql管理器(Firefox附加組件)中運行良好。

+0

請粘貼您創建語句。您的數據庫是在data/data//database/folder中創建的。請通過sqlite瀏覽器進行檢查。如果是,則從數據/數據/ /database /中刪除並重新啓動應用程序。請評論,如果你有任何問題。 –

+0

你好Zohra。我正在使用預先創建的數據庫。 – user3079559

+0

然後您必須將您的數據庫從資產文件夾複製到應用程序數據庫文件夾。 –

回答

0

SQLite不保證表名前綴(如R1.1)是否是結果列名的一部分。

您應明確指定AS的所有視圖的列名稱。

+0

根據建議進行了更改,但仍然沒有運氣! – user3079559

0

問題在於android使用的SQLite版本與sQLite管理器使用的版本不一樣。 Android版本不支持我使用的連接。 以下查詢執行時出現問題。 從該網站得到這個建議http://sqlite.1065341.n5.nabble.com/

SELECT M._id as Meter_id, M.MeterNumber, R1.ReadingDate as ReadingDate, 
R1.Reading AS CurrentReading, R2.ReadingDate AS PrevReadingDate, R2.Reading 
AS PrevMeterReading, R2.Rate as Rate, R2._id as _id,R1.TenantMeter_id as TenantMeterID 
FROM Meters AS M INNER JOIN TenantMeters ON M._id = TenantMeters.Meter_id 
INNER JOIN MeterReading AS R1 ON R1.TenantMeter_id = TenantMeters ._id 
INNER JOIN MeterReading AS R2 ON 
R1.TenantMeter_id = R2.TenantMeter_id 

WHERE (((R2.ReadingDate)=(SELECT Max(R3.ReadingDate) 
     FROM [MeterReading] AS R3 
     WHERE (R3.TenantMeter_id = R1.TenantMeter_id) 
     AND (R3.ReadingDate < R1.ReadingDate) 
    ))) OR (((R2.TenantMeter_id) Is Null))