2012-12-22 90 views
0

我試圖以單個視圖訪問多個表,但我沒有在我的查詢中匹配任何數據。我相當確定問題在於視圖聲明。通過視圖訪問多個表

CREATE VIEW IF NOT EXISTS method_view 
AS SELECT 
peercreateddata.id, 
peercreateddata.name, 
peercreateddata.shared, 
peercreateddata.authorHash, 
peercreateddata.creationDate, 
peercreateddata.firstSeen, 
peercreateddata.lang, 
methods.primaryMatch, 
methods.methodHash, 
methods.methodbyline, 
methods.methodexpirationDate, 
methods.methodlocation, 
localResources.localmimeType, 
remoteResources.remotemimeType, 
remoteResources.remotelocation 

FROM peercreateddata peercreateddata, 
methods methods, 
localResources localResources, 
remoteResources remoteResources 

WHERE (methods.peerDataId = peercreateddata.id) 
     AND (localResources.localMethodId = methods.id) 
     AND (remoteResources.remoteMethodId = methods.id) ; 

查看WHERE子句,methods.peerDataId總是匹配一個值爲peercreateddata.id的值。表localResources和remoteResources有時爲空,有時不包含與查詢匹配的內容,有時包含多個匹配項。

我正在爲Android開發。語法傳遞一個驗證器(儘管一些關於使用名爲'name'的字段的投訴)。

回答

1

使用內部和外部聯接子句。請參閱docs

這種替換FROM子句您和擺脫地方

FROM peercreateddata peercreateddata 
inner join methods methods 
     on methods.peerDataId = peercreateddata.id 
left outer join localResources localResources 
     on localResources.localMethodId = methods.id 
left outer join remoteResources remoteResources 
     on remoteResources.remoteMethodId = methods.id